)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"0bcba4b85943029bfaa4d3ea73c2b3b9f84ff655","unresolved":false,"context_lines":[{"line_number":32,"context_line":"  Note that the options there are dynamically registered and loaded"},{"line_number":33,"context_line":"  by the specified plugin."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Implementetion details:"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"- using keystoneauth1 library instead of keystoneclient"},{"line_number":38,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":12,"id":"7a740942_9bd5691d","line":35,"updated":"2015-12-07 17:46:55.000000000","message":"nit: Implementation","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d49224d41411c37c564b7d9a45624ef15b5a9efc","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  to use respective options from [keystone_authtoken] section as a"},{"line_number":35,"context_line":"  fall-back for backward compatibility."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Implementetion details:"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"- using keystoneauth1 library instead of keystoneclient"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3aaa91ec_460b6824","line":37,"updated":"2016-06-30 11:49:16.000000000","message":"Typo: \"Implementation\"","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"215ac64c6c1d230beecabdad4407b3816ad11506","unresolved":false,"context_lines":[{"line_number":34,"context_line":"  to use respective options from [keystone_authtoken] section as a"},{"line_number":35,"context_line":"  fall-back for backward compatibility."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"Implementetion details:"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"- using keystoneauth1 library instead of keystoneclient"},{"line_number":40,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"1aa78d24_0af56582","line":37,"in_reply_to":"3aaa91ec_460b6824","updated":"2016-07-08 17:16:03.000000000","message":"Done","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d49224d41411c37c564b7d9a45624ef15b5a9efc","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  made to Keystone but implies that only auth plugins that can"},{"line_number":44,"context_line":"  re-authentificate themselves can be used (so no *Token plugins)."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"DevStack plugin is not updated in this very patch yet to test the"},{"line_number":47,"context_line":"backward compatibility with old config options. It will be modified in a"},{"line_number":48,"context_line":"subsequent patch."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"3aaa91ec_eff34471","line":46,"updated":"2016-06-30 11:49:16.000000000","message":"I\u0027d reword this sentence as \"This patch does not update the DevStack plugin, in order to test backwards compatibility with old config options.\"","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"215ac64c6c1d230beecabdad4407b3816ad11506","unresolved":false,"context_lines":[{"line_number":43,"context_line":"  made to Keystone but implies that only auth plugins that can"},{"line_number":44,"context_line":"  re-authentificate themselves can be used (so no *Token plugins)."},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"DevStack plugin is not updated in this very patch yet to test the"},{"line_number":47,"context_line":"backward compatibility with old config options. It will be modified in a"},{"line_number":48,"context_line":"subsequent patch."},{"line_number":49,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":41,"id":"1aa78d24_2af8217c","line":46,"in_reply_to":"3aaa91ec_eff34471","updated":"2016-07-08 17:16:03.000000000","message":"Done","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"}],"etc/ironic/ironic.conf.sample":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"# (integer value)"},{"line_number":1450,"context_line":"#check_timeout \u003d 60000"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"# Timeout in ms on blocking socket operations (integer value)"},{"line_number":1453,"context_line":"#socket_timeout \u003d 10000"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":37,"id":"7aa08908_aa275f61","line":1452,"updated":"2016-06-14 08:51:24.000000000","message":"Please update config sample in this commit. It will make reviewing easier.","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b25432c451546df28865d9066a0f61bb2b1c047e","unresolved":false,"context_lines":[{"line_number":1449,"context_line":"# (integer value)"},{"line_number":1450,"context_line":"#check_timeout \u003d 60000"},{"line_number":1451,"context_line":""},{"line_number":1452,"context_line":"# Timeout in ms on blocking socket operations (integer value)"},{"line_number":1453,"context_line":"#socket_timeout \u003d 10000"},{"line_number":1454,"context_line":""},{"line_number":1455,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":37,"id":"7aa08908_aee63ead","line":1452,"in_reply_to":"7aa08908_aa275f61","updated":"2016-06-14 14:26:13.000000000","message":"will do","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d49224d41411c37c564b7d9a45624ef15b5a9efc","unresolved":false,"context_lines":[{"line_number":825,"context_line":"# From ironic"},{"line_number":826,"context_line":"#"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"# Authentication URL (unknown value)"},{"line_number":829,"context_line":"#auth_url \u003d \u003cNone\u003e"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"# Authentication type to load (unknown value)"}],"source_content_type":"application/octet-stream","patch_set":41,"id":"3aaa91ec_0f197088","line":828,"updated":"2016-06-30 11:49:16.000000000","message":"Are all these \"unknown value\"s autogenerated by keystoneauth1, and thus unfixable within Ironic?","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"d7dd021cea1d93d734a7e187622ca04fa989b801","unresolved":false,"context_lines":[{"line_number":825,"context_line":"# From ironic"},{"line_number":826,"context_line":"#"},{"line_number":827,"context_line":""},{"line_number":828,"context_line":"# Authentication URL (unknown value)"},{"line_number":829,"context_line":"#auth_url \u003d \u003cNone\u003e"},{"line_number":830,"context_line":""},{"line_number":831,"context_line":"# Authentication type to load (unknown value)"}],"source_content_type":"application/octet-stream","patch_set":41,"id":"1aa78d24_3b04fe7c","line":828,"in_reply_to":"3aaa91ec_0f197088","updated":"2016-07-07 16:42:54.000000000","message":"yep, keystoneauth has their own option objects that are somehow translated to oslo.config options, and apparently they do not expose the option type (bool/string etc)","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"}],"ironic/cmd/conductor.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"d205ad6beed25477102c316bdfe8a647b96ac1eb","unresolved":false,"context_lines":[{"line_number":41,"context_line":"def _check_auth_options(conf):"},{"line_number":42,"context_line":"    missing \u003d []"},{"line_number":43,"context_line":"    for section in SECTIONS_WITH_AUTH:"},{"line_number":44,"context_line":"            if not auth.load_auth(conf, section):"},{"line_number":45,"context_line":"                missing.append(\u0027[%s]\u0027 % section)"},{"line_number":46,"context_line":"    if missing:"},{"line_number":47,"context_line":"        link \u003d \"http://docs.openstack.org/releasenotes/ironic/newton.html\""}],"source_content_type":"text/x-python","patch_set":49,"id":"bacf61ea_107756d5","line":44,"updated":"2016-08-03 09:34:14.000000000","message":"overindent","commit_id":"021d4b919f1c0cefd29798f98c832caf26e7fc32"},{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a362ca3a84770e1aac8a03e93fdc9abe1aae982e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"def _check_auth_options(conf):"},{"line_number":42,"context_line":"    missing \u003d []"},{"line_number":43,"context_line":"    for section in SECTIONS_WITH_AUTH:"},{"line_number":44,"context_line":"            if not auth.load_auth(conf, section):"},{"line_number":45,"context_line":"                missing.append(\u0027[%s]\u0027 % section)"},{"line_number":46,"context_line":"    if missing:"},{"line_number":47,"context_line":"        link \u003d \"http://docs.openstack.org/releasenotes/ironic/newton.html\""}],"source_content_type":"text/x-python","patch_set":50,"id":"bacf61ea_97be7c62","line":44,"updated":"2016-08-03 19:16:06.000000000","message":"Nit: indented too far","commit_id":"f9ea26ebf33118cfc179cc183588df2a829db4b6"}],"ironic/common/image_service.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0276da2ece44c14cd159562edcd1e7ace8006a65","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    service_class \u003d getattr(module, \u0027GlanceImageService\u0027)"},{"line_number":90,"context_line":"    if (context is not None and CONF.glance.auth_strategy \u003d\u003d \u0027keystone\u0027"},{"line_number":91,"context_line":"        and not context.auth_token):"},{"line_number":92,"context_line":"        ksess \u003d keystone.KeystoneSession()"},{"line_number":93,"context_line":"        context.auth_token \u003d ksess.get_admin_auth_token()"},{"line_number":94,"context_line":"    return service_class(client, version, context)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_e9cd50b8","line":92,"updated":"2015-11-13 00:54:52.000000000","message":"these are reusable. Save it once somewhere in the context and then just keep using it.","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    service_class \u003d getattr(module, \u0027GlanceImageService\u0027)"},{"line_number":90,"context_line":"    if (context is not None and CONF.glance.auth_strategy \u003d\u003d \u0027keystone\u0027"},{"line_number":91,"context_line":"        and not context.auth_token):"},{"line_number":92,"context_line":"        ksess \u003d keystone.KeystoneSession()"},{"line_number":93,"context_line":"        context.auth_token \u003d ksess.get_admin_auth_token()"},{"line_number":94,"context_line":"    return service_class(client, version, context)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_d9d0b0f8","line":92,"in_reply_to":"da85f559_e9cd50b8","updated":"2015-11-27 11:42:22.000000000","message":"sure, I would like to set a basically working framework in this patch and optimize client code later in subsequent commits","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3732fa12725c811ef5c9f91a508ae168bcbb7123","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    if (context is not None and CONF.glance.auth_strategy \u003d\u003d \u0027keystone\u0027"},{"line_number":91,"context_line":"        and not context.auth_token):"},{"line_number":92,"context_line":"        ksess \u003d keystone.KeystoneSession()"},{"line_number":93,"context_line":"        context.auth_token \u003d ksess.get_admin_auth_token()"},{"line_number":94,"context_line":"    return service_class(client, version, context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_5ddaf579","line":93,"updated":"2015-12-01 08:37:50.000000000","message":"ideally the goal would be to start passing the auth plugin to these clients instead of just the token value, but i\u0027m guessing that\u0027s future work.","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2d22874001bb33a11a2212e5bf247befe4c375e6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    if (context is not None and CONF.glance.auth_strategy \u003d\u003d \u0027keystone\u0027"},{"line_number":91,"context_line":"        and not context.auth_token):"},{"line_number":92,"context_line":"        ksess \u003d keystone.KeystoneSession()"},{"line_number":93,"context_line":"        context.auth_token \u003d ksess.get_admin_auth_token()"},{"line_number":94,"context_line":"    return service_class(client, version, context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_89eb3ab0","line":93,"in_reply_to":"9a8ffd7b_5ddaf579","updated":"2015-12-07 17:33:23.000000000","message":"yes, I would rather make client usage optimizations later in subsequent patches when the new framework is in place","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c1c7185360dadcda45576ef1fdf7121e9040aff0","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        and not context.auth_token):"},{"line_number":108,"context_line":"            global _GLANCE_SESSION"},{"line_number":109,"context_line":"            if not _GLANCE_SESSION:"},{"line_number":110,"context_line":"                _GLANCE_SESSION \u003d keystone.get_session(GLANCE_GROUP)"},{"line_number":111,"context_line":"            context.auth_token \u003d keystone.get_admin_auth_token("},{"line_number":112,"context_line":"                _GLANCE_SESSION)"},{"line_number":113,"context_line":"    return service_class(client, version, context)"}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_acf4d75a","line":110,"updated":"2016-04-14 13:23:35.000000000","message":"nit: you can modify reset_glance_session so that it can accept a function like:\n\n reset_glance_session(lambda: keystone.get_session(GLANCE_GROUP))","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"0c4d0188f31ccfee248a02181b8467ffbdd94d79","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        and not context.auth_token):"},{"line_number":108,"context_line":"            global _GLANCE_SESSION"},{"line_number":109,"context_line":"            if not _GLANCE_SESSION:"},{"line_number":110,"context_line":"                _GLANCE_SESSION \u003d keystone.get_session(GLANCE_GROUP)"},{"line_number":111,"context_line":"            context.auth_token \u003d keystone.get_admin_auth_token("},{"line_number":112,"context_line":"                _GLANCE_SESSION)"},{"line_number":113,"context_line":"    return service_class(client, version, context)"}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_9db78739","line":110,"in_reply_to":"5a18252c_acf4d75a","updated":"2016-04-14 14:01:49.000000000","message":"could you expand on why would you want that?\nthe only reason those reset_*_session exist (at least currently) is to call them in setUp/tearDown/cleanup of unit tests.","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f570744178cf4eeef8333cb5e42c98c3959907de","unresolved":false,"context_lines":[{"line_number":84,"context_line":"_GLANCE_SESSION \u003d None"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def reset_glance_session():"},{"line_number":88,"context_line":"    \"\"\"Reset global session variable."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Mostly useful for unit tests."}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_625309e3","line":87,"updated":"2016-05-16 13:41:37.000000000","message":"IMO more readable to reset value directly in unit tests w/o helper function, but OK as is.","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"918367c72f4cd0dddf21fc5a90bd232d3746701f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"_GLANCE_SESSION \u003d None"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def reset_glance_session():"},{"line_number":88,"context_line":"    \"\"\"Reset global session variable."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Mostly useful for unit tests."}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_3c275c13","line":87,"in_reply_to":"dab17558_625309e3","updated":"2016-05-16 17:33:04.000000000","message":"I am not completely sure how monkey-patching a global variable from unit test would behave, so I just adapted this piece from Nova :)","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"314b0a26cc170e3537e2ecc7ecfc621ccf4341a6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"def reset_glance_session():"},{"line_number":88,"context_line":"    \"\"\"Reset global session variable."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Mostly useful for unit tests."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    global _GLANCE_SESSION"},{"line_number":93,"context_line":"    _GLANCE_SESSION \u003d None"}],"source_content_type":"text/x-python","patch_set":35,"id":"7aa08908_ab53ec37","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":33},"updated":"2016-06-08 10:54:41.000000000","message":"It seems that it\u0027s _only_ used for unittests ? And I don\u0027t think we should do it, cause we should actually mock the global variables in the tests or have a guard function around them, e.g:\n\n def get_glance_session(context):\n     global _GLANCE_SESSION\n     if (_GLANCE_SESSION is None and CONF.glance_auth_strategy ...):\n         _GLANCE_SESSION \u003d keystone.get_session ...\n     return _GLANCE_SESSION\n\nThen we use get_glance_session() in the code here and mock it for unittests.\n\nIf we don\u0027t mock such variable and just call \"reset_glance_session\" when cleaning up the tests, we could potentially introduce a race condition when we run the tests with concurrency where \u003e 1 tests are accessing that variable.","commit_id":"d2364c5de10b71e7c5fe6cae42093ae68f3c6dd2"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"bcda615b724372456e1f079a6d1a1be17640346d","unresolved":false,"context_lines":[{"line_number":87,"context_line":"def reset_glance_session():"},{"line_number":88,"context_line":"    \"\"\"Reset global session variable."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Mostly useful for unit tests."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    global _GLANCE_SESSION"},{"line_number":93,"context_line":"    _GLANCE_SESSION \u003d None"}],"source_content_type":"text/x-python","patch_set":35,"id":"7aa08908_2979e8c8","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":33},"in_reply_to":"7aa08908_996f9cfb","updated":"2016-06-13 12:56:40.000000000","message":"Done","commit_id":"d2364c5de10b71e7c5fe6cae42093ae68f3c6dd2"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"4abd097046c9a9eef38b1e4ca14b39766d3eeb37","unresolved":false,"context_lines":[{"line_number":87,"context_line":"def reset_glance_session():"},{"line_number":88,"context_line":"    \"\"\"Reset global session variable."},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    Mostly useful for unit tests."},{"line_number":91,"context_line":"    \"\"\""},{"line_number":92,"context_line":"    global _GLANCE_SESSION"},{"line_number":93,"context_line":"    _GLANCE_SESSION \u003d None"}],"source_content_type":"text/x-python","patch_set":35,"id":"7aa08908_996f9cfb","line":90,"range":{"start_line":90,"start_character":5,"end_line":90,"end_character":33},"in_reply_to":"7aa08908_ab53ec37","updated":"2016-06-13 07:27:53.000000000","message":"I\u0027ll see what can be done.","commit_id":"d2364c5de10b71e7c5fe6cae42093ae68f3c6dd2"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"314b0a26cc170e3537e2ecc7ecfc621ccf4341a6","unresolved":false,"context_lines":[{"line_number":344,"context_line":""},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"def list_opts():"},{"line_number":347,"context_line":"    return keystone.add_auth_options(glance_opts)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7aa08908_b7187576","line":347,"updated":"2016-06-08 10:54:41.000000000","message":"This looks a bit odd, list_opts() is actually adding it?\n\nWhat happens if it\u0027s called twice?","commit_id":"d2364c5de10b71e7c5fe6cae42093ae68f3c6dd2"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"4abd097046c9a9eef38b1e4ca14b39766d3eeb37","unresolved":false,"context_lines":[{"line_number":344,"context_line":""},{"line_number":345,"context_line":""},{"line_number":346,"context_line":"def list_opts():"},{"line_number":347,"context_line":"    return keystone.add_auth_options(glance_opts)"}],"source_content_type":"text/x-python","patch_set":35,"id":"7aa08908_19a56c46","line":347,"in_reply_to":"7aa08908_b7187576","updated":"2016-06-13 07:27:53.000000000","message":"list_opts is used only during sample config generation through oslo-config-generator (called only from the ironic/common/conf.py).\n\nas options for keystoneauth plugins are registered dynamically at runtime, this is the common way to add config options at least for most used auth plugins to the sample config generated.\n\ncalling it twice will not change anything, as the code of add_auth_options ignores options with the same name (it does not create duplicates) by design, since many auth_plugins have options of the same name (e.g. auth_url)","commit_id":"d2364c5de10b71e7c5fe6cae42093ae68f3c6dd2"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2692cf9b039d6edc09fac872f67d47b63ce569b0","unresolved":false,"context_lines":[{"line_number":87,"context_line":"def _get_glance_session():"},{"line_number":88,"context_line":"    global _GLANCE_SESSION"},{"line_number":89,"context_line":"    if not _GLANCE_SESSION:"},{"line_number":90,"context_line":"        _GLANCE_SESSION \u003d keystone.get_session(GLANCE_GROUP)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"def import_versioned_module(version, submodule\u003dNone):"}],"source_content_type":"text/x-python","patch_set":36,"id":"7aa08908_eb2b4de9","line":90,"updated":"2016-06-13 15:49:13.000000000","message":"forgot to return from here :(","commit_id":"bba1f88220de20f54e3dd2953f60a733fa3e8582"}],"ironic/common/keystone.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"3dc6b0268c7772f46999401c9159808890464bc6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"               help\u003d_(\u0027The URL of the Keystone service.\u0027)),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027auth_plugin\u0027,"},{"line_number":51,"context_line":"               default\u003d\u0027password\u0027,"},{"line_number":52,"context_line":"               choices\u003d(\u0027password\u0027,),"},{"line_number":53,"context_line":"               help\u003d_(\u0027The keystone auth plugin to be used for the service \u0027"},{"line_number":54,"context_line":"                      \u0027account.\u0027)),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027certfile\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_893dbfc5","line":52,"updated":"2015-11-12 15:40:03.000000000","message":"Looks strange, this option is not user selectable. Is it really required?","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"346b7db7538119b9b76d840f3e61e71198672434","unresolved":false,"context_lines":[{"line_number":49,"context_line":"               help\u003d_(\u0027The URL of the Keystone service.\u0027)),"},{"line_number":50,"context_line":"    cfg.StrOpt(\u0027auth_plugin\u0027,"},{"line_number":51,"context_line":"               default\u003d\u0027password\u0027,"},{"line_number":52,"context_line":"               choices\u003d(\u0027password\u0027,),"},{"line_number":53,"context_line":"               help\u003d_(\u0027The keystone auth plugin to be used for the service \u0027"},{"line_number":54,"context_line":"                      \u0027account.\u0027)),"},{"line_number":55,"context_line":"    cfg.StrOpt(\u0027certfile\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_2f028eb4","line":52,"in_reply_to":"da85f559_893dbfc5","updated":"2015-11-12 17:05:12.000000000","message":"that\u0027s for the future, when we could use different auth_plugins. These then could be exposing their own options in the config (as keystonemiddleware does) and loaded directly from these config options.\n\nBut for now I am blocked by necessity to provide a backward-compat with old way of doing things, which supports only password-based auth.\n\nif we hard-code in the code, the config section should probably be renamed to reflect that these options are for password auth plugin only.","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"090425a9b99bd801c1086630aaa91ae351c233cb","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               help\u003d_(\u0027The region used for getting endpoints of OpenStack \u0027"},{"line_number":70,"context_line":"                      \u0027services.\u0027)),"},{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"CONF.register_opts(keystone_opts, group\u003d\u0027keystone\u0027)"},{"line_number":74,"context_line":"CONF.import_group(\u0027keystone_authtoken\u0027, \u0027keystonemiddleware.auth_token\u0027)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_c91e4c5f","line":72,"updated":"2015-11-13 00:52:42.000000000","message":"you really shouldn\u0027t have to do all this, there are helpers for you: \n\nkeystoneclient.session.Session.register_conf_options \nkeystoneclient.session.Session.load_from_conf_options\n\nkeystoneclient.auth.register_conf_options\nkeystoneclient.auth.load_from_conf_options\n\nA large part of this is so that you as the service don\u0027t ever need to worry about the future supported auth plugins, it\u0027s handled for you.","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":69,"context_line":"               help\u003d_(\u0027The region used for getting endpoints of OpenStack \u0027"},{"line_number":70,"context_line":"                      \u0027services.\u0027)),"},{"line_number":71,"context_line":"]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"CONF.register_opts(keystone_opts, group\u003d\u0027keystone\u0027)"},{"line_number":74,"context_line":"CONF.import_group(\u0027keystone_authtoken\u0027, \u0027keystonemiddleware.auth_token\u0027)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_199cf85b","line":72,"in_reply_to":"da85f559_c91e4c5f","updated":"2015-11-27 11:42:22.000000000","message":"done, and rewritten to use keystoneauth as suggested","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ee9b10296daeee7e40893ab3d631f2ec491d9474","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def ks_exceptions(f):"},{"line_number":104,"context_line":"    \"\"\"Wrap keystoneclient functions and centralizes exception handling.\"\"\""},{"line_number":105,"context_line":"    @functools.wraps(f)"},{"line_number":106,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return f(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_ced36d37","line":105,"updated":"2015-11-17 16:22:49.000000000","message":"Please use six.wraps","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def ks_exceptions(f):"},{"line_number":104,"context_line":"    \"\"\"Wrap keystoneclient functions and centralizes exception handling.\"\"\""},{"line_number":105,"context_line":"    @functools.wraps(f)"},{"line_number":106,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return f(*args, **kwargs)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_b9a5aca2","line":105,"in_reply_to":"ba8a016a_ced36d37","updated":"2015-11-27 11:42:22.000000000","message":"Done","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ee9b10296daeee7e40893ab3d631f2ec491d9474","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return f(*args, **kwargs)"},{"line_number":109,"context_line":"        except ksexception.EmptyCatalog as e:"},{"line_number":110,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":111,"context_line":"        except ksexception.EndpointNotFound:"},{"line_number":112,"context_line":"            service_type \u003d kwargs.get(\u0027service_type\u0027, \u0027baremetal\u0027)"},{"line_number":113,"context_line":"            endpoint_type \u003d kwargs.get(\u0027endpoint_type\u0027, \u0027internal\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_2e16b9f1","line":110,"updated":"2015-11-17 16:22:49.000000000","message":"This is the same as except Exception block, maybe remove it?","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        try:"},{"line_number":108,"context_line":"            return f(*args, **kwargs)"},{"line_number":109,"context_line":"        except ksexception.EmptyCatalog as e:"},{"line_number":110,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":111,"context_line":"        except ksexception.EndpointNotFound:"},{"line_number":112,"context_line":"            service_type \u003d kwargs.get(\u0027service_type\u0027, \u0027baremetal\u0027)"},{"line_number":113,"context_line":"            endpoint_type \u003d kwargs.get(\u0027endpoint_type\u0027, \u0027internal\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_d9a2f098","line":110,"in_reply_to":"ba8a016a_2e16b9f1","updated":"2015-11-27 11:42:22.000000000","message":"Done","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ee9b10296daeee7e40893ab3d631f2ec491d9474","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"def _get_session(token\u003dNone):"},{"line_number":168,"context_line":"    \"\"\"Construct a Keystone session to use for requests."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    Session constructed from password auth plugin is created once."},{"line_number":171,"context_line":"    When token is provided, new token-based sessions are being created."}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_c9b607dc","line":168,"updated":"2015-11-17 16:22:49.000000000","message":"It seems to me that it should go into KeystoneSession class, with SESSION becoming class variable.","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":165,"context_line":""},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"def _get_session(token\u003dNone):"},{"line_number":168,"context_line":"    \"\"\"Construct a Keystone session to use for requests."},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"    Session constructed from password auth plugin is created once."},{"line_number":171,"context_line":"    When token is provided, new token-based sessions are being created."}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_79abc475","line":168,"in_reply_to":"ba8a016a_c9b607dc","updated":"2015-11-27 11:42:22.000000000","message":"Done","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4b47e3f529367b532669619b9dc9927ef7a87229","unresolved":false,"context_lines":[{"line_number":40,"context_line":"CONF.register_opts(keystone_opts, group\u003dKEYSTONE_SECTION)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"old_session_opts \u003d {"},{"line_number":43,"context_line":"    \u0027certfile\u0027: [cfg.DeprecatedOpt(\u0027certfile\u0027, \u0027keystone_authtoken\u0027)],"},{"line_number":44,"context_line":"    \u0027keyfile\u0027: [cfg.DeprecatedOpt(\u0027keyfile\u0027, \u0027keystone_authtoken\u0027)],"},{"line_number":45,"context_line":"    \u0027cafile\u0027: [cfg.DeprecatedOpt(\u0027cafile\u0027, \u0027keystone_authtoken\u0027)],"},{"line_number":46,"context_line":"    \u0027insecure\u0027: [cfg.DeprecatedOpt(\u0027insecure\u0027, \u0027keystone_authtoken\u0027)],"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_79e652e9","line":43,"updated":"2015-11-27 17:18:28.000000000","message":"nit - should it be LEGACY_SECTION here and in below options?","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"843a8a935df9053d76bbb569c748b910a7ba5c62","unresolved":false,"context_lines":[{"line_number":40,"context_line":"CONF.register_opts(keystone_opts, group\u003dKEYSTONE_SECTION)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"old_session_opts \u003d {"},{"line_number":43,"context_line":"    \u0027certfile\u0027: [cfg.DeprecatedOpt(\u0027certfile\u0027, \u0027keystone_authtoken\u0027)],"},{"line_number":44,"context_line":"    \u0027keyfile\u0027: [cfg.DeprecatedOpt(\u0027keyfile\u0027, \u0027keystone_authtoken\u0027)],"},{"line_number":45,"context_line":"    \u0027cafile\u0027: [cfg.DeprecatedOpt(\u0027cafile\u0027, \u0027keystone_authtoken\u0027)],"},{"line_number":46,"context_line":"    \u0027insecure\u0027: [cfg.DeprecatedOpt(\u0027insecure\u0027, \u0027keystone_authtoken\u0027)],"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_ca98be1e","line":43,"in_reply_to":"9a8ffd7b_79e652e9","updated":"2015-11-27 18:00:09.000000000","message":"Done","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4b47e3f529367b532669619b9dc9927ef7a87229","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def __init__(self):"},{"line_number":132,"context_line":"        LOG.warn(_LW(\"Auth plugin and its options for service user \""},{"line_number":133,"context_line":"                     \"must be provided in [%(new)s] section. \""},{"line_number":134,"context_line":"                     \"Using values from [%(old)s] section is deprecated.\") % {"},{"line_number":135,"context_line":"                         \u0027new\u0027: AUTH_SECTION, \u0027old\u0027: LEGACY_SECTION})"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_7425f906","line":132,"updated":"2015-11-27 17:18:28.000000000","message":"IIRC warn has been deprecated recently, should be warning.","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"843a8a935df9053d76bbb569c748b910a7ba5c62","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def __init__(self):"},{"line_number":132,"context_line":"        LOG.warn(_LW(\"Auth plugin and its options for service user \""},{"line_number":133,"context_line":"                     \"must be provided in [%(new)s] section. \""},{"line_number":134,"context_line":"                     \"Using values from [%(old)s] section is deprecated.\") % {"},{"line_number":135,"context_line":"                         \u0027new\u0027: AUTH_SECTION, \u0027old\u0027: LEGACY_SECTION})"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_ea9b4216","line":132,"in_reply_to":"9a8ffd7b_7425f906","updated":"2015-11-27 18:00:09.000000000","message":"Done","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3732fa12725c811ef5c9f91a508ae168bcbb7123","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if self._cached_session:"},{"line_number":91,"context_line":"            return self._cached_session"},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            auth \u003d kaloading.load_auth_from_conf_options(CONF, AUTH_SECTION)"},{"line_number":94,"context_line":"            session \u003d kaloading.load_session_from_conf_options("},{"line_number":95,"context_line":"                CONF, KEYSTONE_SECTION, auth\u003dauth)"},{"line_number":96,"context_line":"        except kaexception.ClientException as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_ddba65c0","line":93,"updated":"2015-12-01 08:37:50.000000000","message":"this works with the LegacyLoader as the default and i\u0027ve done this myself a few times. I\u0027ve found it easier to do this manually if you know the options ahead of time. So the pattern is like:\n\ndef load_auth_plugin(self):\n    auth \u003d ksaloading.load_auth_from_conf_options(CONF, AUTH_SECTION)\n    if not auth: \n        LOG.warning(deprecated) \n        auth \u003d kaidentity.V2Password(username\u003dCONF.admin_user, ...)\n    session \u003d kaloading.load_session_from_conf_options(CONF, section, auth\u003dauth)\n\nIt\u0027s just less fiddly trying to make sure the options like up and having to do the conversion in load_from_options, and it means you don\u0027t need to export a plugin via setup.cfg","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2d22874001bb33a11a2212e5bf247befe4c375e6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        if self._cached_session:"},{"line_number":91,"context_line":"            return self._cached_session"},{"line_number":92,"context_line":"        try:"},{"line_number":93,"context_line":"            auth \u003d kaloading.load_auth_from_conf_options(CONF, AUTH_SECTION)"},{"line_number":94,"context_line":"            session \u003d kaloading.load_session_from_conf_options("},{"line_number":95,"context_line":"                CONF, KEYSTONE_SECTION, auth\u003dauth)"},{"line_number":96,"context_line":"        except kaexception.ClientException as e:"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_7376b2a5","line":93,"in_reply_to":"9a8ffd7b_ddba65c0","updated":"2015-12-07 17:33:23.000000000","message":"Done","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"567b6778e8c932ee7dcc24121986c1f9446a221c","unresolved":false,"context_lines":[{"line_number":53,"context_line":"# in KeystoneSession after deprecation period"},{"line_number":54,"context_line":"CONF.import_group(LEGACY_SECTION, \u0027keystonemiddleware.auth_token\u0027)"},{"line_number":55,"context_line":"kaloading.register_auth_conf_options(CONF, AUTH_SECTION)"},{"line_number":56,"context_line":"cfg.CONF.set_default(\"auth_type\", default\u003d\"password\", group\u003dAUTH_SECTION)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def ks_exceptions(f):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_4d2b4a95","line":56,"updated":"2016-02-02 12:16:06.000000000","message":"nit - why is this cfg.CONF?","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3d10e9d140e24809f270f65c1d11abb9b605ea5b","unresolved":false,"context_lines":[{"line_number":53,"context_line":"# in KeystoneSession after deprecation period"},{"line_number":54,"context_line":"CONF.import_group(LEGACY_SECTION, \u0027keystonemiddleware.auth_token\u0027)"},{"line_number":55,"context_line":"kaloading.register_auth_conf_options(CONF, AUTH_SECTION)"},{"line_number":56,"context_line":"cfg.CONF.set_default(\"auth_type\", default\u003d\"password\", group\u003dAUTH_SECTION)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"def ks_exceptions(f):"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_bca9ce92","line":56,"in_reply_to":"7a5de9d1_4d2b4a95","updated":"2016-02-02 17:17:49.000000000","message":"Done","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"567b6778e8c932ee7dcc24121986c1f9446a221c","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _legacy_warning():"},{"line_number":81,"context_line":"    LOG.warning(_LW(\"Auth plugin and its options for service user \""},{"line_number":82,"context_line":"                    \"must be provided in [%(new)s] section. \""},{"line_number":83,"context_line":"                    \"Using values from [%(old)s] section is deprecated.\") % {"},{"line_number":84,"context_line":"                        \u0027new\u0027: AUTH_SECTION, \u0027old\u0027: LEGACY_SECTION})"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_4319d978","line":81,"updated":"2016-02-02 12:16:06.000000000","message":"This is only used once, maybe worth just doing logging instead of function call?","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3d10e9d140e24809f270f65c1d11abb9b605ea5b","unresolved":false,"context_lines":[{"line_number":78,"context_line":""},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"def _legacy_warning():"},{"line_number":81,"context_line":"    LOG.warning(_LW(\"Auth plugin and its options for service user \""},{"line_number":82,"context_line":"                    \"must be provided in [%(new)s] section. \""},{"line_number":83,"context_line":"                    \"Using values from [%(old)s] section is deprecated.\") % {"},{"line_number":84,"context_line":"                        \u0027new\u0027: AUTH_SECTION, \u0027old\u0027: LEGACY_SECTION})"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_41a9d123","line":81,"in_reply_to":"7a5de9d1_4319d978","updated":"2016-02-02 17:17:49.000000000","message":"Done","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c1c7185360dadcda45576ef1fdf7121e9040aff0","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        except (kaexception.NoMatchingPlugin,"},{"line_number":96,"context_line":"                kaexception.MissingRequiredOptions) as e:"},{"line_number":97,"context_line":"            raise exception.ConfigInvalid(six.text_type(e))"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":100,"context_line":"    return wrapper"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_6ce0ff96","line":98,"updated":"2016-04-14 13:23:35.000000000","message":"Lets have logging here:\n\n LOG.exception(\u0027Keystone request failed\u0027)\n\nthis way we\u0027ll be able to debug something, if e.g. KeyError happens (str of KeyError is not very informative)","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"0c4d0188f31ccfee248a02181b8467ffbdd94d79","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        except (kaexception.NoMatchingPlugin,"},{"line_number":96,"context_line":"                kaexception.MissingRequiredOptions) as e:"},{"line_number":97,"context_line":"            raise exception.ConfigInvalid(six.text_type(e))"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":100,"context_line":"    return wrapper"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_fdb2fbe3","line":98,"in_reply_to":"5a18252c_6ce0ff96","updated":"2016-04-14 14:01:49.000000000","message":"will do","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"7b026e5be1e0e7ea5ed8d33922b19c56add69bd7","unresolved":false,"context_lines":[{"line_number":95,"context_line":"        except (kaexception.NoMatchingPlugin,"},{"line_number":96,"context_line":"                kaexception.MissingRequiredOptions) as e:"},{"line_number":97,"context_line":"            raise exception.ConfigInvalid(six.text_type(e))"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":100,"context_line":"    return wrapper"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"dab17558_03ea0cdb","line":98,"in_reply_to":"5a18252c_fdb2fbe3","updated":"2016-05-10 11:02:54.000000000","message":"Done","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c1c7185360dadcda45576ef1fdf7121e9040aff0","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    Currently used for inspector, glance and swift clients."},{"line_number":177,"context_line":"    Only swift client does not actually support using sessions directly,"},{"line_number":178,"context_line":"    LP #1518938, others should be updated in ironic code."},{"line_number":179,"context_line":"    \"\"\""},{"line_number":180,"context_line":"    return session.get_token()"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_ccef9385","line":178,"updated":"2016-04-14 13:23:35.000000000","message":"Not sure I get this, ironic-inspector-client seems to support sessions..","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"0c4d0188f31ccfee248a02181b8467ffbdd94d79","unresolved":false,"context_lines":[{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    Currently used for inspector, glance and swift clients."},{"line_number":177,"context_line":"    Only swift client does not actually support using sessions directly,"},{"line_number":178,"context_line":"    LP #1518938, others should be updated in ironic code."},{"line_number":179,"context_line":"    \"\"\""},{"line_number":180,"context_line":"    return session.get_token()"},{"line_number":181,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_fd9b1b64","line":178,"in_reply_to":"5a18252c_ccef9385","updated":"2016-04-14 14:01:49.000000000","message":"In this patch I was not modifying almost any client-constructing code except for neutron ( to keep the patch size down).\n\nSo for now, those places still call out to get a token and construct the client with it instead of passing a session directly - I will deal with them in subsequent patches.","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f570744178cf4eeef8333cb5e42c98c3959907de","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                kaexception.MissingRequiredOptions) as e:"},{"line_number":97,"context_line":"            raise exception.ConfigInvalid(six.text_type(e))"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            LOG.exception(\u0027Keystone request failed\u0027)"},{"line_number":100,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":101,"context_line":"    return wrapper"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_47bff7a9","line":99,"updated":"2016-05-16 13:41:37.000000000","message":"1) Should be translated with _LE() 2) Log should contain detail error info, please add string representation of exception.","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"918367c72f4cd0dddf21fc5a90bd232d3746701f","unresolved":false,"context_lines":[{"line_number":96,"context_line":"                kaexception.MissingRequiredOptions) as e:"},{"line_number":97,"context_line":"            raise exception.ConfigInvalid(six.text_type(e))"},{"line_number":98,"context_line":"        except Exception as e:"},{"line_number":99,"context_line":"            LOG.exception(\u0027Keystone request failed\u0027)"},{"line_number":100,"context_line":"            raise exception.KeystoneFailure(six.text_type(e))"},{"line_number":101,"context_line":"    return wrapper"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_90ef49b0","line":99,"in_reply_to":"dab17558_47bff7a9","updated":"2016-05-16 17:33:04.000000000","message":"Done","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":2889,"name":"Aeva Black","email":"aeva.online@gmail.com","username":"tenbrae"},"change_message_id":"6c176fb60f00ae9c369cd21eb23883d3963a3746","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    except kaexception.MissingRequiredOptions:"},{"line_number":124,"context_line":"        load_failed \u003d True"},{"line_number":125,"context_line":"    if load_failed or auth is None:"},{"line_number":126,"context_line":"        LOG.warning(_LW(\"Auth plugin and its options for service user \""},{"line_number":127,"context_line":"                        \"must be provided in [%(new)s] section. \""},{"line_number":128,"context_line":"                        \"Using values from [%(old)s] section \""},{"line_number":129,"context_line":"                        \"is deprecated.\"),"}],"source_content_type":"text/x-python","patch_set":33,"id":"bab6814e_60e042fb","line":126,"updated":"2016-05-19 22:38:04.000000000","message":"I would like to suggest slightly different wording here:\n\n  Authentication credentials for the [%(new)s] service user\n  should be provided in the [%(new)s] configuration section,\n  but were found in the [%(old)s] location. Please update\n  your config file. This config section is deprecated and\n  will be removed in a future release. See %(link)s\n  for details.\n\nWith a link to the release note / doc page on this change.","commit_id":"88819380380f88ec3d60a4ee075972bbe859800c"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"e02075fc73364666a0313729fa2533d14003cf99","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    except kaexception.MissingRequiredOptions:"},{"line_number":124,"context_line":"        load_failed \u003d True"},{"line_number":125,"context_line":"    if load_failed or auth is None:"},{"line_number":126,"context_line":"        LOG.warning(_LW(\"Auth plugin and its options for service user \""},{"line_number":127,"context_line":"                        \"must be provided in [%(new)s] section. \""},{"line_number":128,"context_line":"                        \"Using values from [%(old)s] section \""},{"line_number":129,"context_line":"                        \"is deprecated.\"),"}],"source_content_type":"text/x-python","patch_set":33,"id":"7aa08908_589d4058","line":126,"in_reply_to":"bab6814e_60e042fb","updated":"2016-06-07 14:09:51.000000000","message":"Such wording is not true - this section is not going to be removed (as it configures keystonemiddleware), but in the future values from this section will be ignored for service clients.\n\nI think I see what you\u0027ve meant, I\u0027ll try to reword it.","commit_id":"88819380380f88ec3d60a4ee075972bbe859800c"},{"author":{"_account_id":18893,"name":"Miles Gould","email":"mgould@redhat.com","username":"pozorvlak"},"change_message_id":"d49224d41411c37c564b7d9a45624ef15b5a9efc","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def ks_exceptions(f):"},{"line_number":88,"context_line":"    \"\"\"Wrap keystoneclient functions and centralizes exception handling.\"\"\""},{"line_number":89,"context_line":"    @six.wraps(f)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":91,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_32b2cfe5","line":88,"updated":"2016-06-30 11:49:16.000000000","message":"Nit: \"Wraps\"","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"215ac64c6c1d230beecabdad4407b3816ad11506","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def ks_exceptions(f):"},{"line_number":88,"context_line":"    \"\"\"Wrap keystoneclient functions and centralizes exception handling.\"\"\""},{"line_number":89,"context_line":"    @six.wraps(f)"},{"line_number":90,"context_line":"    def wrapper(*args, **kwargs):"},{"line_number":91,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_2a4b012d","line":88,"in_reply_to":"3aaa91ec_32b2cfe5","updated":"2016-07-08 17:16:03.000000000","message":"Done","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5797484de89f79f176f99c2fbfe70484510a2442","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneauth1 import loading as kaloading"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"from six.moves.urllib import parse  # for legacy options loading only"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ironic.common import exception"},{"line_number":24,"context_line":"from ironic.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_60be2f00","line":21,"updated":"2016-08-01 15:46:33.000000000","message":"Not sure what\u0027s this comment is about.","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"8fdcfd4d7e590da9a31c15924b5b8bccfeeefb41","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from keystoneauth1 import loading as kaloading"},{"line_number":19,"context_line":"from oslo_log import log as logging"},{"line_number":20,"context_line":"import six"},{"line_number":21,"context_line":"from six.moves.urllib import parse  # for legacy options loading only"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ironic.common import exception"},{"line_number":24,"context_line":"from ironic.common.i18n import _"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_9b6c6d09","line":21,"in_reply_to":"bacf61ea_60be2f00","updated":"2016-08-01 16:33:22.000000000","message":"this import is used only in code path that loads creds from [keystone_authtoken] section which this patch deprecates, so this import should be removed after deprecation period.\n\nJust a reminder to future me or whoever will maintain this code :)","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"}],"ironic/common/neutron.py":[{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"47303bb8ad11b9b2be86dc128b6bc986803b9fac","unresolved":false,"context_lines":[{"line_number":28,"context_line":"neutron_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027url\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\"URL for connecting to neutron. \""},{"line_number":31,"context_line":"                      \"By default uses \u0027http://$my_ip:9696\u0027 when \""},{"line_number":32,"context_line":"                      \"auth_strategy is \u0027noauth\u0027\")),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027url_timeout\u0027,"},{"line_number":34,"context_line":"               default\u003d30,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Timeout value for connecting to neutron in seconds.\u0027)),"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_8879d6ca","line":32,"range":{"start_line":31,"start_character":60,"end_line":32,"end_character":47},"updated":"2016-06-24 14:29:30.000000000","message":"This change touches default config value and should be mentioned in release note.","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"215ac64c6c1d230beecabdad4407b3816ad11506","unresolved":false,"context_lines":[{"line_number":28,"context_line":"neutron_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027url\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\"URL for connecting to neutron. \""},{"line_number":31,"context_line":"                      \"By default uses \u0027http://$my_ip:9696\u0027 when \""},{"line_number":32,"context_line":"                      \"auth_strategy is \u0027noauth\u0027\")),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027url_timeout\u0027,"},{"line_number":34,"context_line":"               default\u003d30,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Timeout value for connecting to neutron in seconds.\u0027)),"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_eaf29905","line":32,"range":{"start_line":31,"start_character":60,"end_line":32,"end_character":47},"in_reply_to":"1aa78d24_1b94a235","updated":"2016-07-08 17:16:03.000000000","message":"Done","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"d7dd021cea1d93d734a7e187622ca04fa989b801","unresolved":false,"context_lines":[{"line_number":28,"context_line":"neutron_opts \u003d ["},{"line_number":29,"context_line":"    cfg.StrOpt(\u0027url\u0027,"},{"line_number":30,"context_line":"               help\u003d_(\"URL for connecting to neutron. \""},{"line_number":31,"context_line":"                      \"By default uses \u0027http://$my_ip:9696\u0027 when \""},{"line_number":32,"context_line":"                      \"auth_strategy is \u0027noauth\u0027\")),"},{"line_number":33,"context_line":"    cfg.IntOpt(\u0027url_timeout\u0027,"},{"line_number":34,"context_line":"               default\u003d30,"},{"line_number":35,"context_line":"               help\u003d_(\u0027Timeout value for connecting to neutron in seconds.\u0027)),"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_1b94a235","line":32,"range":{"start_line":31,"start_character":60,"end_line":32,"end_character":47},"in_reply_to":"3aaa91ec_8879d6ca","updated":"2016-07-07 16:42:54.000000000","message":"Well, the effective default config value stays the same, I just handle it later, not in the option declaration.","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"47303bb8ad11b9b2be86dc128b6bc986803b9fac","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.StrOpt(\u0027auth_strategy\u0027,"},{"line_number":45,"context_line":"               default\u003d\u0027keystone\u0027,"},{"line_number":46,"context_line":"               choices\u003d[\u0027keystone\u0027, \u0027noauth\u0027],"},{"line_number":47,"context_line":"               help\u003d_(\u0027Default authentication strategy to use when connecting \u0027"},{"line_number":48,"context_line":"                      \u0027to neutron. \u0027"},{"line_number":49,"context_line":"                      \u0027Running neutron in noauth mode (related to but not \u0027"},{"line_number":50,"context_line":"                      \u0027affected by this setting) is insecure and should only \u0027"}],"source_content_type":"text/x-python","patch_set":41,"id":"3aaa91ec_a8bf72a8","line":47,"range":{"start_line":47,"start_character":23,"end_line":47,"end_character":30},"updated":"2016-06-24 14:29:30.000000000","message":"Why default? There is no rollback.","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"215ac64c6c1d230beecabdad4407b3816ad11506","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    cfg.StrOpt(\u0027auth_strategy\u0027,"},{"line_number":45,"context_line":"               default\u003d\u0027keystone\u0027,"},{"line_number":46,"context_line":"               choices\u003d[\u0027keystone\u0027, \u0027noauth\u0027],"},{"line_number":47,"context_line":"               help\u003d_(\u0027Default authentication strategy to use when connecting \u0027"},{"line_number":48,"context_line":"                      \u0027to neutron. \u0027"},{"line_number":49,"context_line":"                      \u0027Running neutron in noauth mode (related to but not \u0027"},{"line_number":50,"context_line":"                      \u0027affected by this setting) is insecure and should only \u0027"}],"source_content_type":"text/x-python","patch_set":41,"id":"1aa78d24_caf7ddf3","line":47,"range":{"start_line":47,"start_character":23,"end_line":47,"end_character":30},"in_reply_to":"3aaa91ec_a8bf72a8","updated":"2016-07-08 17:16:03.000000000","message":"Done","commit_id":"2c1c269be63292a8c37d264ab99637b2c418bce1"}],"ironic/common/swift.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ee9b10296daeee7e40893ab3d631f2ec491d9474","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: ks.get_service_url(service_type\u003d\u0027object-store\u0027),"},{"line_number":50,"context_line":"            \u0027preauthtoken\u0027: ks.get_admin_auth_token(),"},{"line_number":51,"context_line":"            \u0027os_options\u0027: {\u0027region_name\u0027: ks.region_name}"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_94ca52a0","line":51,"updated":"2015-11-17 16:22:49.000000000","message":"I think there is no region_name in KeystoneSession object?","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: ks.get_service_url(service_type\u003d\u0027object-store\u0027),"},{"line_number":50,"context_line":"            \u0027preauthtoken\u0027: ks.get_admin_auth_token(),"},{"line_number":51,"context_line":"            \u0027os_options\u0027: {\u0027region_name\u0027: ks.region_name}"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_39069c86","line":51,"in_reply_to":"ba8a016a_94ca52a0","updated":"2015-11-27 11:42:22.000000000","message":"Done","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4b47e3f529367b532669619b9dc9927ef7a87229","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: ks.get_service_url(service_type\u003d\u0027object-store\u0027),"},{"line_number":50,"context_line":"            \u0027preauthtoken\u0027: ks.get_admin_auth_token(),"},{"line_number":51,"context_line":"            \u0027os_options\u0027: {\u0027region_name\u0027: ks.region_name}"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_19e06695","line":51,"updated":"2015-11-27 17:18:28.000000000","message":"Should be region now :) And as all the gates are happy with that, maybe these os_options are not needed at all?","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"843a8a935df9053d76bbb569c748b910a7ba5c62","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: ks.get_service_url(service_type\u003d\u0027object-store\u0027),"},{"line_number":50,"context_line":"            \u0027preauthtoken\u0027: ks.get_admin_auth_token(),"},{"line_number":51,"context_line":"            \u0027os_options\u0027: {\u0027region_name\u0027: ks.region_name}"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_2a44eab4","line":51,"in_reply_to":"9a8ffd7b_19e06695","updated":"2015-11-27 18:00:09.000000000","message":"that\u0027s indeed an error, which should have been raised with smth like AttributeError.\n\nmight that be that gates do not exercise the Swift somehow?","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"fdc1eec2e94775ee739a4d67b9763f71f0f7fce2","unresolved":false,"context_lines":[{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: ks.get_service_url(service_type\u003d\u0027object-store\u0027),"},{"line_number":50,"context_line":"            \u0027preauthtoken\u0027: ks.get_admin_auth_token(),"},{"line_number":51,"context_line":"            \u0027os_options\u0027: {\u0027region_name\u0027: ks.region_name}"},{"line_number":52,"context_line":"        }"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a8ffd7b_8a6cf608","line":51,"in_reply_to":"9a8ffd7b_2a44eab4","updated":"2015-11-27 18:02:12.000000000","message":"and that\u0027s exactly what ilo gate has caught it seems by ir-cond log.","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"567b6778e8c932ee7dcc24121986c1f9446a221c","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # - Path (verify using specific CA certificate)"},{"line_number":56,"context_line":"        verify \u003d ks.session.verify"},{"line_number":57,"context_line":"        params[\u0027insecure\u0027] \u003d not verify"},{"line_number":58,"context_line":"        if verify and verify is not True:"},{"line_number":59,"context_line":"            params[\u0027cacert\u0027] \u003d verify"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_90cdd95f","line":58,"updated":"2016-02-02 12:16:06.000000000","message":"This made me think about what it does for a bit :) Maybe if verify and isinstance(verify, six.string_types) might be better?","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3d10e9d140e24809f270f65c1d11abb9b605ea5b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        # - Path (verify using specific CA certificate)"},{"line_number":56,"context_line":"        verify \u003d ks.session.verify"},{"line_number":57,"context_line":"        params[\u0027insecure\u0027] \u003d not verify"},{"line_number":58,"context_line":"        if verify and verify is not True:"},{"line_number":59,"context_line":"            params[\u0027cacert\u0027] \u003d verify"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        self.connection \u003d swift_client.Connection(**params)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_0130b906","line":58,"in_reply_to":"7a5de9d1_90cdd95f","updated":"2016-02-02 17:17:49.000000000","message":"Done","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"c1c7185360dadcda45576ef1fdf7121e9040aff0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        # Must be reworked when LP bug #1518938 is fixed."},{"line_number":60,"context_line":"        global _SWIFT_SESSION"},{"line_number":61,"context_line":"        if not _SWIFT_SESSION:"},{"line_number":62,"context_line":"            _SWIFT_SESSION \u003d keystone.get_session(SWIFT_GROUP)"},{"line_number":63,"context_line":"        params \u003d {"},{"line_number":64,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":65,"context_line":"            \u0027preauthurl\u0027: keystone.get_service_url("}],"source_content_type":"text/x-python","patch_set":29,"id":"5a18252c_0ce6abaf","line":62,"updated":"2016-04-14 13:23:35.000000000","message":"ditto about reset_swift_session","commit_id":"f7d4c97d7a73cb9710d9ee5771ed32c0fb91ae4f"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"_SWIFT_SESSION \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _get_swift_session():"},{"line_number":46,"context_line":"    global _SWIFT_SESSION"},{"line_number":47,"context_line":"    if not _SWIFT_SESSION:"},{"line_number":48,"context_line":"        _SWIFT_SESSION \u003d keystone.get_session(SWIFT_GROUP)"},{"line_number":49,"context_line":"    return _SWIFT_SESSION"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class SwiftAPI(object):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_dcc1dd81","line":49,"range":{"start_line":44,"start_character":0,"end_line":49,"end_character":25},"updated":"2016-06-14 08:51:24.000000000","message":"It looks completely like _get_glance_session. Might be create a general method for all cases?","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b25432c451546df28865d9066a0f61bb2b1c047e","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"_SWIFT_SESSION \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _get_swift_session():"},{"line_number":46,"context_line":"    global _SWIFT_SESSION"},{"line_number":47,"context_line":"    if not _SWIFT_SESSION:"},{"line_number":48,"context_line":"        _SWIFT_SESSION \u003d keystone.get_session(SWIFT_GROUP)"},{"line_number":49,"context_line":"    return _SWIFT_SESSION"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class SwiftAPI(object):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_f0ff9831","line":49,"range":{"start_line":44,"start_character":0,"end_line":49,"end_character":25},"in_reply_to":"7aa08908_dcc1dd81","updated":"2016-06-14 14:26:13.000000000","message":"all `_get_*_session` look the same, and \"keystone.get_session\" is the general method.\n\nas _get_*_session are operating on globals i\u0027d rather not pass globals between modules and modify them outside of the module they are defined in.","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"9a8c58bc17bb5def5aa392e3dc683a0cf677b0b7","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"_SWIFT_SESSION \u003d None"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"def _get_swift_session():"},{"line_number":46,"context_line":"    global _SWIFT_SESSION"},{"line_number":47,"context_line":"    if not _SWIFT_SESSION:"},{"line_number":48,"context_line":"        _SWIFT_SESSION \u003d keystone.get_session(SWIFT_GROUP)"},{"line_number":49,"context_line":"    return _SWIFT_SESSION"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"class SwiftAPI(object):"}],"source_content_type":"text/x-python","patch_set":37,"id":"3aaa91ec_52395bf1","line":49,"range":{"start_line":44,"start_character":0,"end_line":49,"end_character":25},"in_reply_to":"7aa08908_f0ff9831","updated":"2016-06-24 13:56:16.000000000","message":"Might be consider to create global object with sessions. Where keys are group names (swift,neutron,inspector) and values are keystone sessions.\nAdd get_keystone_session() method that accepts session name and returns keystone session if it already exists, otherwise create new.","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # NOTE(pas-ha):session.verify is for HTTPS urls and can be"},{"line_number":67,"context_line":"        # - False (do not verify)"},{"line_number":68,"context_line":"        # - True (verify but try to locate system CA certificates)"},{"line_number":69,"context_line":"        # - Path (verify using specific CA certificate)"},{"line_number":70,"context_line":"        verify \u003d session.verify"},{"line_number":71,"context_line":"        params[\u0027insecure\u0027] \u003d not verify"},{"line_number":72,"context_line":"        if verify and isinstance(verify, six.string_types):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_6a945736","line":69,"updated":"2016-06-14 08:51:24.000000000","message":"According to option description insecure is a boolean value https://github.com/openstack/ironic/blob/master/etc/ironic/ironic.conf.sample#L1307. Could you please show a case when it is set to Path?","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b25432c451546df28865d9066a0f61bb2b1c047e","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        # NOTE(pas-ha):session.verify is for HTTPS urls and can be"},{"line_number":67,"context_line":"        # - False (do not verify)"},{"line_number":68,"context_line":"        # - True (verify but try to locate system CA certificates)"},{"line_number":69,"context_line":"        # - Path (verify using specific CA certificate)"},{"line_number":70,"context_line":"        verify \u003d session.verify"},{"line_number":71,"context_line":"        params[\u0027insecure\u0027] \u003d not verify"},{"line_number":72,"context_line":"        if verify and isinstance(verify, six.string_types):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_651da872","line":69,"in_reply_to":"7aa08908_6a945736","updated":"2016-06-14 14:26:13.000000000","message":"that\u0027s \"verify\", not \"insecure\" - these are different. insecure is boolean, verify is tri-valued (False, True, Path) and is constructed from values of \"insecure\" and \"cafile\"\n\nhttp://docs.python-requests.org/en/master/user/advanced/#ssl-cert-verification\n\nbasically what happens here is keystoneauth loads the session from config options, but swiftclient does not support sessions (for now) so I have to reconstruct the insecure/cacert arguments from session","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5797484de89f79f176f99c2fbfe70484510a2442","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        session \u003d _get_swift_session()"},{"line_number":47,"context_line":"        params \u003d {"},{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: keystone.get_service_url("},{"line_number":50,"context_line":"                session,"},{"line_number":51,"context_line":"                service_type\u003d\u0027object-store\u0027),"},{"line_number":52,"context_line":"            \u0027preauthtoken\u0027: keystone.get_admin_auth_token(session)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_95343c4a","line":49,"updated":"2016-08-01 15:46:33.000000000","message":"Why do we need to pass preauthurl and preauthtoken along with all the password-related things? What will happen when the preauthtoken expires?","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"8fdcfd4d7e590da9a31c15924b5b8bccfeeefb41","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        session \u003d _get_swift_session()"},{"line_number":47,"context_line":"        params \u003d {"},{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: keystone.get_service_url("},{"line_number":50,"context_line":"                session,"},{"line_number":51,"context_line":"                service_type\u003d\u0027object-store\u0027),"},{"line_number":52,"context_line":"            \u0027preauthtoken\u0027: keystone.get_admin_auth_token(session)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_a66678ea","line":49,"in_reply_to":"bacf61ea_95343c4a","updated":"2016-08-01 16:33:22.000000000","message":"we do not pass any other password-related things, only the token (\u0027session\u0027 is passed to \u0027get_service_url\u0027 and \u0027get_admin_auth_token\u0027, not to the client itself). we need the token here since swiftclient still does not support Keystone sessions so it can not re-auth itself.\n\nwe generate a new token here in place, so it is very unlikely it will expire. current code does not use any persistent SwiftAPI() objects (all invocations are created new in functions called from somewhere else) so a new token will be generated for each usage","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4d778dc8fdaec56dc0803c2e1c30391c07494b31","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        session \u003d _get_swift_session()"},{"line_number":47,"context_line":"        params \u003d {"},{"line_number":48,"context_line":"            \u0027retries\u0027: CONF.swift.swift_max_retries,"},{"line_number":49,"context_line":"            \u0027preauthurl\u0027: keystone.get_service_url("},{"line_number":50,"context_line":"                session,"},{"line_number":51,"context_line":"                service_type\u003d\u0027object-store\u0027),"},{"line_number":52,"context_line":"            \u0027preauthtoken\u0027: keystone.get_admin_auth_token(session)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_41bfa660","line":49,"in_reply_to":"bacf61ea_a66678ea","updated":"2016-08-01 16:54:03.000000000","message":"Oh, indeed, I completely missed this. Thanks for clarifying!","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"}],"ironic/conf/auth.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5797484de89f79f176f99c2fbfe70484510a2442","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    The rest are registered at runtime depending on auth plugin used."},{"line_number":48,"context_line":"    \"\"\""},{"line_number":49,"context_line":"    kaloading.register_session_conf_options("},{"line_number":50,"context_line":"        conf, group, deprecated_opts\u003dold_session_opts)"},{"line_number":51,"context_line":"    kaloading.register_auth_conf_options(conf, group)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_72ad5e9a","line":50,"range":{"start_line":50,"start_character":37,"end_line":50,"end_character":53},"updated":"2016-08-01 15:46:33.000000000","message":"I\u0027d prefer this to be capitalized.","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"8fdcfd4d7e590da9a31c15924b5b8bccfeeefb41","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    The rest are registered at runtime depending on auth plugin used."},{"line_number":48,"context_line":"    \"\"\""},{"line_number":49,"context_line":"    kaloading.register_session_conf_options("},{"line_number":50,"context_line":"        conf, group, deprecated_opts\u003dold_session_opts)"},{"line_number":51,"context_line":"    kaloading.register_auth_conf_options(conf, group)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_2688c870","line":50,"range":{"start_line":50,"start_character":37,"end_line":50,"end_character":53},"in_reply_to":"bacf61ea_72ad5e9a","updated":"2016-08-01 16:33:22.000000000","message":"will do","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"}],"ironic/conf/service_catalog.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"a362ca3a84770e1aac8a03e93fdc9abe1aae982e","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def register_opts(conf):"},{"line_number":29,"context_line":"    auth.register_auth_opts(conf, SERVCIE_CATALOG_GROUP.name)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":50,"id":"bacf61ea_89e2e42d","line":29,"updated":"2016-08-03 19:16:06.000000000","message":"s/SERVCIE/SERVICE/\n\nCan you fix that in a follow-up, please?","commit_id":"f9ea26ebf33118cfc179cc183588df2a829db4b6"}],"ironic/dhcp/neutron.py":[{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"0276da2ece44c14cd159562edcd1e7ace8006a65","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        params[\u0027endpoint_url\u0027] \u003d CONF.neutron.url"},{"line_number":92,"context_line":"        params[\u0027auth_strategy\u0027] \u003d None"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return clientv20.Client(**params)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class NeutronDHCPApi(base.BaseDHCP):"}],"source_content_type":"text/x-python","patch_set":6,"id":"da85f559_89dcc475","line":94,"updated":"2015-11-13 00:54:52.000000000","message":"the idea here is that you should be able to pass the session directly to the client. Almost all clients support this (essentially just not swift)","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":91,"context_line":"        params[\u0027endpoint_url\u0027] \u003d CONF.neutron.url"},{"line_number":92,"context_line":"        params[\u0027auth_strategy\u0027] \u003d None"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    return clientv20.Client(**params)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"class NeutronDHCPApi(base.BaseDHCP):"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_f9fb3479","line":94,"in_reply_to":"da85f559_89dcc475","updated":"2015-11-27 11:42:22.000000000","message":"Done","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3732fa12725c811ef5c9f91a508ae168bcbb7123","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \u0027retries\u0027: CONF.neutron.retries,"},{"line_number":76,"context_line":"        \u0027insecure\u0027: CONF.keystone.insecure,"},{"line_number":77,"context_line":"        \u0027ca_cert\u0027: CONF.keystone.cafile,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    url \u003d CONF.neutron.url"},{"line_number":81,"context_line":"    if CONF.neutron.auth_strategy \u003d\u003d \u0027noauth\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_3d54d152","line":78,"updated":"2015-12-01 08:37:50.000000000","message":"these are generally passed to Session(), it\u0027s a strange mix between keystone and neutron options.","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2d22874001bb33a11a2212e5bf247befe4c375e6","unresolved":false,"context_lines":[{"line_number":75,"context_line":"        \u0027retries\u0027: CONF.neutron.retries,"},{"line_number":76,"context_line":"        \u0027insecure\u0027: CONF.keystone.insecure,"},{"line_number":77,"context_line":"        \u0027ca_cert\u0027: CONF.keystone.cafile,"},{"line_number":78,"context_line":"    }"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    url \u003d CONF.neutron.url"},{"line_number":81,"context_line":"    if CONF.neutron.auth_strategy \u003d\u003d \u0027noauth\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_5f3ac9ce","line":78,"in_reply_to":"9a8ffd7b_3d54d152","updated":"2015-12-07 17:33:23.000000000","message":"yes, these here are mostly for \u0027noauth\u0027 case, AFAIK they would be simply ignored by the client when I pass the session in.\n\nGenerally it seems that for maximal flexibility we would need to go the way similar to what Heat does, that is provide per-client options for session and auth_plugin but have defaults in e.g. [keystone] section when client specific section is missing.","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3732fa12725c811ef5c9f91a508ae168bcbb7123","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    url \u003d CONF.neutron.url"},{"line_number":81,"context_line":"    if CONF.neutron.auth_strategy \u003d\u003d \u0027noauth\u0027:"},{"line_number":82,"context_line":"        params[\u0027endpoint_url\u0027] \u003d url or default_neutron_url"},{"line_number":83,"context_line":"        params[\u0027auth_strategy\u0027] \u003d \u0027noauth\u0027"},{"line_number":84,"context_line":"    else:"},{"line_number":85,"context_line":"        ks \u003d keystone.KeystoneSession()"},{"line_number":86,"context_line":"        if token is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_5dff5534","line":83,"updated":"2015-12-01 08:37:50.000000000","message":"we could do this with a noauth plugin if it makes it more consistent.","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2d22874001bb33a11a2212e5bf247befe4c375e6","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    url \u003d CONF.neutron.url"},{"line_number":81,"context_line":"    if CONF.neutron.auth_strategy \u003d\u003d \u0027noauth\u0027:"},{"line_number":82,"context_line":"        params[\u0027endpoint_url\u0027] \u003d url or default_neutron_url"},{"line_number":83,"context_line":"        params[\u0027auth_strategy\u0027] \u003d \u0027noauth\u0027"},{"line_number":84,"context_line":"    else:"},{"line_number":85,"context_line":"        ks \u003d keystone.KeystoneSession()"},{"line_number":86,"context_line":"        if token is None:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_bcb2e3e3","line":83,"in_reply_to":"9a8ffd7b_5dff5534","updated":"2015-12-07 17:33:23.000000000","message":"is there such a thing already in keystoneauth1? could not find it...\n\nbesides, AFAICT neutronclient does not pass auth_strategy to the SessionClient, so this somehow should be handled in Adapter","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3732fa12725c811ef5c9f91a508ae168bcbb7123","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                params[\u0027region_name\u0027] \u003d ks.region"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            params[\u0027token\u0027] \u003d token"},{"line_number":98,"context_line":"            params[\u0027endpoint_url\u0027] \u003d url or ks.get_service_url(\u0027network\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    return clientv20.Client(**params)"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_ddc025e3","line":98,"updated":"2015-12-01 08:37:50.000000000","message":"this is keystoneauth1.token_endpoint.Token","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"3732fa12725c811ef5c9f91a508ae168bcbb7123","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            params[\u0027token\u0027] \u003d token"},{"line_number":98,"context_line":"            params[\u0027endpoint_url\u0027] \u003d url or ks.get_service_url(\u0027network\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    return clientv20.Client(**params)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class NeutronDHCPApi(base.BaseDHCP):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9a8ffd7b_fd80898d","line":100,"updated":"2015-12-01 08:37:50.000000000","message":"pass region to client with session","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"2d22874001bb33a11a2212e5bf247befe4c375e6","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            params[\u0027token\u0027] \u003d token"},{"line_number":98,"context_line":"            params[\u0027endpoint_url\u0027] \u003d url or ks.get_service_url(\u0027network\u0027)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    return clientv20.Client(**params)"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":""},{"line_number":103,"context_line":"class NeutronDHCPApi(base.BaseDHCP):"}],"source_content_type":"text/x-python","patch_set":12,"id":"7a740942_f3fb82bf","line":100,"in_reply_to":"9a8ffd7b_fd80898d","updated":"2015-12-07 17:33:23.000000000","message":"Jammie, if you do not mind, I\u0027d rather postpone client optimizations re session handling to next patches, one client at a time\n\ne.g in this case to unify the session approach and construct the correct token auth when token is supplied, I\u0027d have to change signatures of couple of \"public\" api methods below to pass context through, not a plain token, and I\u0027d rather make such changes not in this patch","commit_id":"ba10722ae9ecafbe17196b18bf09e40bb4a1dfff"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f570744178cf4eeef8333cb5e42c98c3959907de","unresolved":false,"context_lines":[{"line_number":69,"context_line":"CONF.register_opts(neutron_opts, group\u003dNEUTRON_GROUP)"},{"line_number":70,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"default_neutron_url \u003d \u0027http://%s:9696\u0027 % CONF.my_ip"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"_NEUTRON_SESSION \u003d None"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_1d226052","line":72,"updated":"2016-05-16 13:41:37.000000000","message":"nit: please use uppercase for this name.","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":7711,"name":"Yuriy Zveryanskyy","email":"yzveryanskyy@mirantis.com","username":"yuriyz"},"change_message_id":"f7032687ce59c93b147856dae6ee107b23e936fd","unresolved":false,"context_lines":[{"line_number":69,"context_line":"CONF.register_opts(neutron_opts, group\u003dNEUTRON_GROUP)"},{"line_number":70,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"default_neutron_url \u003d \u0027http://%s:9696\u0027 % CONF.my_ip"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"_NEUTRON_SESSION \u003d None"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_fda67b0d","line":72,"in_reply_to":"dab17558_1d226052","updated":"2016-05-16 13:48:16.000000000","message":"Also are you sure that config is parsed before import this module?","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"918367c72f4cd0dddf21fc5a90bd232d3746701f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"CONF.register_opts(neutron_opts, group\u003dNEUTRON_GROUP)"},{"line_number":70,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"default_neutron_url \u003d \u0027http://%s:9696\u0027 % CONF.my_ip"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"_NEUTRON_SESSION \u003d None"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_b07ecde1","line":72,"in_reply_to":"dab17558_1d226052","updated":"2016-05-16 17:33:04.000000000","message":"Done","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"918367c72f4cd0dddf21fc5a90bd232d3746701f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"CONF.register_opts(neutron_opts, group\u003dNEUTRON_GROUP)"},{"line_number":70,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"default_neutron_url \u003d \u0027http://%s:9696\u0027 % CONF.my_ip"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"_NEUTRON_SESSION \u003d None"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"dab17558_3c7d9c1c","line":72,"in_reply_to":"dab17558_fda67b0d","updated":"2016-05-16 17:33:04.000000000","message":"I\u0027ve tested it with an extra debug string, the conf is parsed enough at this point.\n\nBesides, if it was working before (in the default of cfg.Opt) it should also work now, they are on the same logical level at import time.","commit_id":"76ff512767a119bc408f93df2522edf4f1a703e0"}],"ironic/drivers/modules/deploy_utils.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ee9b10296daeee7e40893ab3d631f2ec491d9474","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"    if not ironic_api:"},{"line_number":1405,"context_line":"        ks \u003d keystone.KeystoneSession()"},{"line_number":1406,"context_line":"        ironic_api \u003d ks.get_service_url()"},{"line_number":1407,"context_line":"    ironic_api.rstrip(\u0027/\u0027)"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"    agent_config_opts \u003d {"},{"line_number":1410,"context_line":"        \u0027ipa-api-url\u0027: ironic_api,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_14a0a29e","line":1407,"updated":"2015-11-17 16:22:49.000000000","message":"ironic_api \u003d ironic_api.rstrip(\u0027/\u0027)","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":1404,"context_line":"    if not ironic_api:"},{"line_number":1405,"context_line":"        ks \u003d keystone.KeystoneSession()"},{"line_number":1406,"context_line":"        ironic_api \u003d ks.get_service_url()"},{"line_number":1407,"context_line":"    ironic_api.rstrip(\u0027/\u0027)"},{"line_number":1408,"context_line":""},{"line_number":1409,"context_line":"    agent_config_opts \u003d {"},{"line_number":1410,"context_line":"        \u0027ipa-api-url\u0027: ironic_api,"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_99ed48b9","line":1407,"in_reply_to":"ba8a016a_14a0a29e","updated":"2015-11-27 11:42:22.000000000","message":"Done","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    return _IRONIC_SESSION"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"def get_ironic_api_url():"},{"line_number":149,"context_line":"    ironic_api \u003d CONF.conductor.api_url"},{"line_number":150,"context_line":"    if not ironic_api:"},{"line_number":151,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_4af19b94","line":148,"updated":"2016-06-14 08:51:24.000000000","message":"docstring is missing.","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b25432c451546df28865d9066a0f61bb2b1c047e","unresolved":false,"context_lines":[{"line_number":145,"context_line":"    return _IRONIC_SESSION"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"def get_ironic_api_url():"},{"line_number":149,"context_line":"    ironic_api \u003d CONF.conductor.api_url"},{"line_number":150,"context_line":"    if not ironic_api:"},{"line_number":151,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_ee8b26c1","line":148,"in_reply_to":"7aa08908_4af19b94","updated":"2016-06-14 14:26:13.000000000","message":"will add, here and others","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":1227,"context_line":"                                              {\u0027error_msg\u0027: error_msg})"},{"line_number":1228,"context_line":""},{"line_number":1229,"context_line":""},{"line_number":1230,"context_line":"def list_opts():"},{"line_number":1231,"context_line":"    return keystone.add_auth_options(deploy_opts)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_9c9ab560","line":1230,"updated":"2016-06-14 08:51:24.000000000","message":"docstring is missed here.","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"}],"ironic/drivers/modules/inspector.py":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":60,"context_line":"_INSPECTOR_SESSION \u003d None"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"def _get_inspector_session():"},{"line_number":64,"context_line":"    global _INSPECTOR_SESSION"},{"line_number":65,"context_line":"    if not _INSPECTOR_SESSION:"},{"line_number":66,"context_line":"        _INSPECTOR_SESSION \u003d keystone.get_session(INSPECTOR_GROUP)"},{"line_number":67,"context_line":"    return _INSPECTOR_SESSION"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class Inspector(base.InspectInterface):"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_bf24c35f","line":67,"range":{"start_line":63,"start_character":0,"end_line":67,"end_character":29},"updated":"2016-06-14 08:51:24.000000000","message":"ditto","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"}],"ironic/drivers/modules/iscsi_deploy.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"ee9b10296daeee7e40893ab3d631f2ec491d9474","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        ks \u003d keystone.KeystoneSession()"},{"line_number":498,"context_line":"        ironic_api \u003d ks.get_service_url()"},{"line_number":499,"context_line":"    # NOTE: we should strip \u0027/\u0027 from the end because this is intended for"},{"line_number":500,"context_line":"    ironic_api.rstrip(\u0027/\u0027)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    deploy_key \u003d utils.random_alnum(32)"},{"line_number":503,"context_line":"    i_info \u003d node.instance_info"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba8a016a_3472864a","line":500,"updated":"2015-11-17 16:22:49.000000000","message":"ditto","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"ee7a9fa596075d823b15b124cffe8bdde2a64c51","unresolved":false,"context_lines":[{"line_number":497,"context_line":"        ks \u003d keystone.KeystoneSession()"},{"line_number":498,"context_line":"        ironic_api \u003d ks.get_service_url()"},{"line_number":499,"context_line":"    # NOTE: we should strip \u0027/\u0027 from the end because this is intended for"},{"line_number":500,"context_line":"    ironic_api.rstrip(\u0027/\u0027)"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    deploy_key \u003d utils.random_alnum(32)"},{"line_number":503,"context_line":"    i_info \u003d node.instance_info"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a8ffd7b_d9251009","line":500,"in_reply_to":"ba8a016a_3472864a","updated":"2015-11-27 11:42:22.000000000","message":"done and refactored to a separate function in deploy_utils, as code here and there is basically identical","commit_id":"6ef872f5ec95d28dbc2fc0529c3c37dab116cfc1"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":387,"context_line":"             catalog."},{"line_number":388,"context_line":"    :raises: MissingParameterValue if no ports are enrolled for the given node."},{"line_number":389,"context_line":"    \"\"\""},{"line_number":390,"context_line":"    # TODO(lucasagomes): Validate the format of the URL"},{"line_number":391,"context_line":"    deploy_utils.get_ironic_api_url()"},{"line_number":392,"context_line":"    # Validate the root device hints"},{"line_number":393,"context_line":"    deploy_utils.parse_root_device_hints(task.node)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_7c9d49bb","line":390,"range":{"start_line":390,"start_character":18,"end_line":390,"end_character":19},"updated":"2016-06-14 08:51:24.000000000","message":"this TODO should be moved to deploy_utils as well.","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b25432c451546df28865d9066a0f61bb2b1c047e","unresolved":false,"context_lines":[{"line_number":387,"context_line":"             catalog."},{"line_number":388,"context_line":"    :raises: MissingParameterValue if no ports are enrolled for the given node."},{"line_number":389,"context_line":"    \"\"\""},{"line_number":390,"context_line":"    # TODO(lucasagomes): Validate the format of the URL"},{"line_number":391,"context_line":"    deploy_utils.get_ironic_api_url()"},{"line_number":392,"context_line":"    # Validate the root device hints"},{"line_number":393,"context_line":"    deploy_utils.parse_root_device_hints(task.node)"}],"source_content_type":"text/x-python","patch_set":37,"id":"7aa08908_d0e53cdc","line":390,"range":{"start_line":390,"start_character":18,"end_line":390,"end_character":19},"in_reply_to":"7aa08908_7c9d49bb","updated":"2016-06-14 14:26:13.000000000","message":"not really, that method only returns the url value,\nvalidation should then happen here, in the \"validate\" method","commit_id":"55ec13a5b2ca2eb1b7bdbf14690f23509351b2f0"}],"ironic/tests/unit/common/test_keystone.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"567b6778e8c932ee7dcc24121986c1f9446a221c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(KeystoneTestCase, self).setUp()"},{"line_number":29,"context_line":"        self.config(group\u003d\u0027keystone\u0027,"},{"line_number":30,"context_line":"                    region_name\u003d\u0027fake_region\u0027)"},{"line_number":31,"context_line":"        self.config(auth_uri\u003d\u0027http://127.0.0.1:9898/v2.0\u0027,"},{"line_number":32,"context_line":"                    admin_user\u003d\u0027fake_user\u0027, admin_password\u003d\u0027fake_pass\u0027,"},{"line_number":33,"context_line":"                    admin_tenant_name\u003d\u0027fake_tenant\u0027,"},{"line_number":34,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_c37069df","line":31,"updated":"2016-02-02 12:16:06.000000000","message":"So, before there it was possible to specifyno  version in auth_uri if it was specified in auth_version parameter. Now it is changed? Might be worth adding this to reno too.","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3d10e9d140e24809f270f65c1d11abb9b605ea5b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        super(KeystoneTestCase, self).setUp()"},{"line_number":29,"context_line":"        self.config(group\u003d\u0027keystone\u0027,"},{"line_number":30,"context_line":"                    region_name\u003d\u0027fake_region\u0027)"},{"line_number":31,"context_line":"        self.config(auth_uri\u003d\u0027http://127.0.0.1:9898/v2.0\u0027,"},{"line_number":32,"context_line":"                    admin_user\u003d\u0027fake_user\u0027, admin_password\u003d\u0027fake_pass\u0027,"},{"line_number":33,"context_line":"                    admin_tenant_name\u003d\u0027fake_tenant\u0027,"},{"line_number":34,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_f280cd4b","line":31,"in_reply_to":"7a5de9d1_c37069df","updated":"2016-02-02 17:17:49.000000000","message":"AFAIU before it was working only due to keystoneclient having a defaults for domain [1], as there is no domain handling in our code. keystoneauth is less forgiving, when /v3 is specified in auth_url, it requires domain info to be supplied.\n\non the other hand, with keystoneauth when not-versioned endpoint is given, and no domain info is provided, v2 will be chosen automatically if it is existing in Keystone\n\nI\u0027ll see what can be done for complete backward compat, though it would be rather involved...\n\n[1] https://github.com/openstack/python-keystoneclient/blob/master/keystoneclient/httpclient.py#L334-L352","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"},{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"567b6778e8c932ee7dcc24121986c1f9446a221c","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.config(auth_uri\u003d\u0027http://127.0.0.1:9898/v2.0\u0027,"},{"line_number":32,"context_line":"                    admin_user\u003d\u0027fake_user\u0027, admin_password\u003d\u0027fake_pass\u0027,"},{"line_number":33,"context_line":"                    admin_tenant_name\u003d\u0027fake_tenant\u0027,"},{"line_number":34,"context_line":"                    group\u003d\u0027keystone_authtoken\u0027)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def test_failure_authorization(self, session_mock):"},{"line_number":37,"context_line":"        session_mock().get_endpoint.side_effect \u003d ("}],"source_content_type":"text/x-python","patch_set":18,"id":"7a5de9d1_8647df1c","line":34,"updated":"2016-02-02 12:16:06.000000000","message":"Would be also nice to have some tests with keystone_auth parameters. (e.g. if some required parameters are missing from keystone_auth, we use \u0027v2password\u0027 auth, otherwise just password).","commit_id":"9920d5d9fc7bfbdf151e2f4bc2322dc1451eccdd"}],"ironic/tests/unit/dhcp/test_neutron.py":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"5797484de89f79f176f99c2fbfe70484510a2442","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        super(TestNeutron, self).setUp()"},{"line_number":38,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\u0027fake\u0027)"},{"line_number":39,"context_line":"        # ironic_auth.register_auth_opts(cfg.CONF, \u0027neutron\u0027)"},{"line_number":40,"context_line":"        self.config("},{"line_number":41,"context_line":"            cleaning_network_uuid\u003d\u002700000000-0000-0000-0000-000000000000\u0027,"},{"line_number":42,"context_line":"            group\u003d\u0027neutron\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_d5ea34da","line":39,"updated":"2016-08-01 15:46:33.000000000","message":"Hm, seems like this is not needed","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"8fdcfd4d7e590da9a31c15924b5b8bccfeeefb41","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def setUp(self):"},{"line_number":37,"context_line":"        super(TestNeutron, self).setUp()"},{"line_number":38,"context_line":"        mgr_utils.mock_the_extension_manager(driver\u003d\u0027fake\u0027)"},{"line_number":39,"context_line":"        # ironic_auth.register_auth_opts(cfg.CONF, \u0027neutron\u0027)"},{"line_number":40,"context_line":"        self.config("},{"line_number":41,"context_line":"            cleaning_network_uuid\u003d\u002700000000-0000-0000-0000-000000000000\u0027,"},{"line_number":42,"context_line":"            group\u003d\u0027neutron\u0027)"}],"source_content_type":"text/x-python","patch_set":46,"id":"bacf61ea_06b9442e","line":39,"in_reply_to":"bacf61ea_d5ea34da","updated":"2016-08-01 16:33:22.000000000","message":"yep, will remove","commit_id":"3aa04fddb83af0df6b77c3c007ecb3e1275dafbc"}],"releasenotes/notes/keystone-auth-3155762c524e44df.yaml":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0433048eaed2ab083ed985844b1e94d07bcd81df","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    New way of configuring access credentials for OpenStack services clients."},{"line_number":5,"context_line":"    For each service both Keystone session options"},{"line_number":6,"context_line":"    (timeout, SSL-related ones) and Keystone auth_plugin options"},{"line_number":7,"context_line":"    (auth_url, auth_type and correspondig auth_plugin options)"},{"line_number":8,"context_line":"    should be specified in the config section for this service."},{"line_number":9,"context_line":"    Config section affected are"},{"line_number":10,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":49,"id":"bacf61ea_10d75d24","line":7,"range":{"start_line":7,"start_character":29,"end_line":7,"end_character":41},"updated":"2016-08-03 07:17:31.000000000","message":"s/correspondig/corresponding","commit_id":"021d4b919f1c0cefd29798f98c832caf26e7fc32"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0433048eaed2ab083ed985844b1e94d07bcd81df","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    * ``[service_catalog]`` *new section* for Ironic service user,"},{"line_number":16,"context_line":"      used to discover Ironic endpoint from Keystone Catalog"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    This enables fine tuning of authentification for each service."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"    Backward-compatible options handling is provided"},{"line_number":21,"context_line":"    using values from ``[keystone_authtoken]`` config section,"}],"source_content_type":"text/x-yaml","patch_set":49,"id":"bacf61ea_7025f95a","line":18,"range":{"start_line":18,"start_character":32,"end_line":18,"end_character":48},"updated":"2016-08-03 07:17:31.000000000","message":"s/authentification/authentication","commit_id":"021d4b919f1c0cefd29798f98c832caf26e7fc32"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"0433048eaed2ab083ed985844b1e94d07bcd81df","unresolved":false,"context_lines":[{"line_number":34,"context_line":""},{"line_number":35,"context_line":"  - New config section ``[service_catalog]`` for access credentials used"},{"line_number":36,"context_line":"    to discover Ironic API URL from Keystone Catalog."},{"line_number":37,"context_line":"    Previousely credentials from ``[keystone_authtoken]`` section were used,"},{"line_number":38,"context_line":"    which is now deprecated for such purpose."},{"line_number":39,"context_line":"fixes:"},{"line_number":40,"context_line":"  - Do not rely on keystonemiddleware config options for instantiating"}],"source_content_type":"text/x-yaml","patch_set":49,"id":"bacf61ea_d0ff85a8","line":37,"range":{"start_line":37,"start_character":4,"end_line":37,"end_character":15},"updated":"2016-08-03 07:17:31.000000000","message":"s/Previousely/Previously","commit_id":"021d4b919f1c0cefd29798f98c832caf26e7fc32"}],"requirements.txt":[{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"961465c243d82f09092e492996f6dee9e553309b","unresolved":false,"context_lines":[{"line_number":12,"context_line":"paramiko\u003e\u003d2.0 # LGPL"},{"line_number":13,"context_line":"python-neutronclient\u003e\u003d4.2.0 # Apache-2.0"},{"line_number":14,"context_line":"python-glanceclient\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":15,"context_line":"python-keystoneclient!\u003d1.8.0,!\u003d2.1.0,\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":16,"context_line":"ironic-lib\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":17,"context_line":"python-swiftclient\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":18,"context_line":"pytz\u003e\u003d2013.6 # MIT"}],"source_content_type":"text/plain","patch_set":37,"id":"7aa08908_3ff1f395","side":"PARENT","line":15,"updated":"2016-06-14 08:51:24.000000000","message":"Once we mowed to keystoneauth1, it is no longer needed https://github.com/openstack/ironic/blob/master/ironic/common/service.py#L126","commit_id":"09f87fb175c99ff5c8482504f901d6792dfd6a42"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"b25432c451546df28865d9066a0f61bb2b1c047e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"paramiko\u003e\u003d2.0 # LGPL"},{"line_number":13,"context_line":"python-neutronclient\u003e\u003d4.2.0 # Apache-2.0"},{"line_number":14,"context_line":"python-glanceclient\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":15,"context_line":"python-keystoneclient!\u003d1.8.0,!\u003d2.1.0,\u003e\u003d1.7.0 # Apache-2.0"},{"line_number":16,"context_line":"ironic-lib\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":17,"context_line":"python-swiftclient\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":18,"context_line":"pytz\u003e\u003d2013.6 # MIT"}],"source_content_type":"text/plain","patch_set":37,"id":"7aa08908_b07d106f","side":"PARENT","line":15,"in_reply_to":"7aa08908_3ff1f395","updated":"2016-06-14 14:26:13.000000000","message":"agree, will remove.","commit_id":"09f87fb175c99ff5c8482504f901d6792dfd6a42"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"129706b28a77ecaf0c7538642b997dc833240955","unresolved":false,"context_lines":[{"line_number":13,"context_line":"python-neutronclient\u003e\u003d4.2.0 # Apache-2.0"},{"line_number":14,"context_line":"python-glanceclient\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":15,"context_line":"ironic-lib\u003e\u003d1.3.0 # Apache-2.0"},{"line_number":16,"context_line":"keystoneauth1\u003e\u003d2.1.0  # Apache-2.0"},{"line_number":17,"context_line":"python-swiftclient\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":18,"context_line":"pytz\u003e\u003d2013.6 # MIT"},{"line_number":19,"context_line":"stevedore\u003e\u003d1.10.0 # Apache-2.0"}],"source_content_type":"text/plain","patch_set":39,"id":"3aaa91ec_d38f7121","line":16,"updated":"2016-06-23 00:05:27.000000000","message":"should be:\n\n keystoneauth1\u003e\u003d2.7.0  # Apache-2.0","commit_id":"01805df571f2f461fa09b9e7112b16fde6a81242"},{"author":{"_account_id":14525,"name":"Vasyl Saienko","email":"vsaienko@mirantis.com","username":"vsaienko"},"change_message_id":"f3bf0a39c0754906b7d0e67965629c4bb66a3171","unresolved":false,"context_lines":[{"line_number":12,"context_line":"paramiko\u003e\u003d2.0 # LGPLv2.1+"},{"line_number":13,"context_line":"python-neutronclient\u003e\u003d4.2.0 # Apache-2.0"},{"line_number":14,"context_line":"python-glanceclient\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":15,"context_line":"keystoneauth1\u003e\u003d2.7.0  # Apache-2.0"},{"line_number":16,"context_line":"ironic-lib\u003e\u003d2.0.0 # Apache-2.0"},{"line_number":17,"context_line":"python-swiftclient\u003e\u003d2.2.0 # Apache-2.0"},{"line_number":18,"context_line":"pytz\u003e\u003d2013.6 # MIT"}],"source_content_type":"text/plain","patch_set":47,"id":"bacf61ea_8e709141","line":15,"updated":"2016-08-02 06:51:12.000000000","message":"here should be 2.10.0 according to https://github.com/openstack/requirements/blob/master/global-requirements.txt#L68","commit_id":"8e9c05a46c1850cf98fb6ea8476b416e8892eb0b"}],"setup.cfg":[{"author":{"_account_id":12356,"name":"Vladyslav Drok","email":"vdrok@mirantis.com","username":"vdrok"},"change_message_id":"4b47e3f529367b532669619b9dc9927ef7a87229","unresolved":false,"context_lines":[{"line_number":86,"context_line":"ironic.database.migration_backend \u003d"},{"line_number":87,"context_line":"    sqlalchemy \u003d ironic.db.sqlalchemy.migration"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"keystoneauth1.plugin \u003d "},{"line_number":90,"context_line":"    ironic-legacy-auth \u003d ironic.common.keystone:LegacyAuthLoader"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"[pbr]"}],"source_content_type":"text/x-ttcn-cfg","patch_set":8,"id":"9a8ffd7b_74a2d99a","line":89,"updated":"2015-11-27 17:18:28.000000000","message":"nit - trailing whitespace","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"843a8a935df9053d76bbb569c748b910a7ba5c62","unresolved":false,"context_lines":[{"line_number":86,"context_line":"ironic.database.migration_backend \u003d"},{"line_number":87,"context_line":"    sqlalchemy \u003d ironic.db.sqlalchemy.migration"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"keystoneauth1.plugin \u003d "},{"line_number":90,"context_line":"    ironic-legacy-auth \u003d ironic.common.keystone:LegacyAuthLoader"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"[pbr]"}],"source_content_type":"text/x-ttcn-cfg","patch_set":8,"id":"9a8ffd7b_4a8daed4","line":89,"in_reply_to":"9a8ffd7b_74a2d99a","updated":"2015-11-27 18:00:09.000000000","message":"Done","commit_id":"36808b5c526be0a3b2cbeb8ab19ab9a4d2eebcf9"}]}
