)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3b5c5eda82bf354e6106eb155bb2ca20c5dee8d","unresolved":false,"context_lines":[{"line_number":11,"context_line":"arguments are filtered."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Actually, `_append_global_identity_args` method checks the wrong name of"},{"line_number":14,"context_line":"flag. KeystoneAuth library supports flag \"--os-token\" (\"--\" is missed"},{"line_number":15,"context_line":"in the flag name while checking, so \"password\" auth type was always used)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"In case of Token auth type, password auth related arguments (i.e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"df87a7cf_a101e8b1","line":14,"range":{"start_line":14,"start_character":6,"end_line":14,"end_character":53},"updated":"2017-12-15 15:33:32.000000000","message":"Am I correctly following this by checking the token plugin option here?\n\nhttps://github.com/openstack/keystoneauth/blob/master/keystoneauth1/loading/_plugins/admin_token.py#L41\n\nAnd that\u0027s used here?\n\nhttps://github.com/openstack/keystoneauth/blob/master/keystoneauth1/loading/cli.py#L29","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88f8afd4c37765895dbed2248feb1b6b5173377e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"arguments are filtered."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Actually, `_append_global_identity_args` method checks the wrong name of"},{"line_number":14,"context_line":"flag. KeystoneAuth library supports flag \"--os-token\" (\"--\" is missed"},{"line_number":15,"context_line":"in the flag name while checking, so \"password\" auth type was always used)."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"In case of Token auth type, password auth related arguments (i.e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"df87a7cf_bcf7cf59","line":14,"range":{"start_line":14,"start_character":6,"end_line":14,"end_character":53},"in_reply_to":"df87a7cf_a101e8b1","updated":"2017-12-15 16:19:34.000000000","message":"I updated the commit message with more details.","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3b5c5eda82bf354e6106eb155bb2ca20c5dee8d","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":"In case of Token auth type, password auth related arguments (i.e"},{"line_number":18,"context_line":"os_username, os_user_id, etc) are missed, so we do not need to obtain them"},{"line_number":19,"context_line":"at all (it raises AttributeError)."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: #1659015"},{"line_number":22,"context_line":"Change-Id: Ibc861d396b71fe105288d8336623cc22cf92523e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"df87a7cf_41dfbc39","line":19,"range":{"start_line":19,"start_character":8,"end_line":19,"end_character":10},"updated":"2017-12-15 15:33:32.000000000","message":"What is \"it\"? keystoneauth? And raises AttributeError when/how? Does this mean ksa raises AttributeError if you try loading a token auth plugin and we\u0027ve passed a username/user_id/etc?","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"80ca5ddbe1570396dfb4e3b4e44ecb82ce4654e9","unresolved":false,"context_lines":[{"line_number":15,"context_line":"  If `--os-auth-type` is specified to token, keystoneauth1 library makes"},{"line_number":16,"context_line":"  the right decision[2]."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"* Based on an auth type, keystoneauth library registrates different CLI"},{"line_number":19,"context_line":"  arguments[3]. It means that `--os-username` argument is available only"},{"line_number":20,"context_line":"  in password auth type, `--os-token` is available only in token auth"},{"line_number":21,"context_line":"  type, etc."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"9f6a8fd7_568e77d0","line":18,"range":{"start_line":18,"start_character":46,"end_line":18,"end_character":57},"updated":"2018-04-19 18:42:50.000000000","message":"registers","commit_id":"5d06375f6af871b044c475bd0364e150a69a99af"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"80ca5ddbe1570396dfb4e3b4e44ecb82ce4654e9","unresolved":false,"context_lines":[{"line_number":22,"context_line":"  It also affects the way how the python code should access such"},{"line_number":23,"context_line":"  arguments. The arguments which unrelate to the selected auth type are"},{"line_number":24,"context_line":"  missed from the parsed arguments object."},{"line_number":25,"context_line":"  Sounds reasonable, but we tried to access to them like they present"},{"line_number":26,"context_line":"  constantly there. AttributeError proves that mistake."},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"Combination of these 2 issues made token auth type broken in CLI layer."},{"line_number":29,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":18,"id":"9f6a8fd7_d6bb676f","line":26,"range":{"start_line":25,"start_character":2,"end_line":26,"end_character":19},"updated":"2018-04-19 18:42:50.000000000","message":"This is hard to read, maybe re-word as, \"That sounds reasonable, but unfortunately the code assumes the unrelated arguments are always present which leads to an AttributeError.\"","commit_id":"5d06375f6af871b044c475bd0364e150a69a99af"}],"novaclient/shell.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1c370c30877a664badb52f7aeab4b52b5ff29e51","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        os_auth_url \u003d args.os_auth_url"},{"line_number":677,"context_line":"        os_region_name \u003d args.os_region_name"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        os_project_domain_id \u003d args.os_project_domain_id"},{"line_number":680,"context_line":"        os_project_domain_name \u003d args.os_project_domain_name"},{"line_number":681,"context_line":"        os_user_domain_id \u003d getattr(args, \"os_user_domain_id\", None)"},{"line_number":682,"context_line":"        os_user_domain_name \u003d getattr(args, \"os_user_domain_name\", None)"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_db043116","line":680,"range":{"start_line":679,"start_character":8,"end_line":680,"end_character":60},"updated":"2017-01-24 14:21:29.000000000","message":"hang on, did you break these being optional?","commit_id":"12074807939c095e9f9a5d224c1dfb1d7b8064b1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"01c1f227260d067a50565914a61cb869592c633b","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        os_auth_url \u003d args.os_auth_url"},{"line_number":677,"context_line":"        os_region_name \u003d args.os_region_name"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        os_project_domain_id \u003d args.os_project_domain_id"},{"line_number":680,"context_line":"        os_project_domain_name \u003d args.os_project_domain_name"},{"line_number":681,"context_line":"        os_user_domain_id \u003d getattr(args, \"os_user_domain_id\", None)"},{"line_number":682,"context_line":"        os_user_domain_name \u003d getattr(args, \"os_user_domain_name\", None)"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_fb564dcc","line":680,"range":{"start_line":679,"start_character":8,"end_line":680,"end_character":60},"in_reply_to":"5a3905b3_db043116","updated":"2017-01-24 14:26:39.000000000","message":"They are optional, but exist for both password and token auth methods. It means that default values will be applied and we will not have AttributeError.\n\nuser_id, user_domain_id do not exist in case of token method and _append_global_identity_args doesn\u0027t register them, that is why I used getattr there.","commit_id":"12074807939c095e9f9a5d224c1dfb1d7b8064b1"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"71ee6de06f4dfe573f1a4768f567e322d86c82c4","unresolved":false,"context_lines":[{"line_number":676,"context_line":"        os_auth_url \u003d args.os_auth_url"},{"line_number":677,"context_line":"        os_region_name \u003d args.os_region_name"},{"line_number":678,"context_line":""},{"line_number":679,"context_line":"        os_project_domain_id \u003d args.os_project_domain_id"},{"line_number":680,"context_line":"        os_project_domain_name \u003d args.os_project_domain_name"},{"line_number":681,"context_line":"        os_user_domain_id \u003d getattr(args, \"os_user_domain_id\", None)"},{"line_number":682,"context_line":"        os_user_domain_name \u003d getattr(args, \"os_user_domain_name\", None)"},{"line_number":683,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_7b57bd25","line":680,"range":{"start_line":679,"start_character":8,"end_line":680,"end_character":60},"in_reply_to":"5a3905b3_fb564dcc","updated":"2017-01-24 14:37:23.000000000","message":"Ah... I get you.","commit_id":"12074807939c095e9f9a5d224c1dfb1d7b8064b1"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a056ca264ee02a6188c87c3c82357ef0135b2b34","unresolved":false,"context_lines":[{"line_number":855,"context_line":"            user_domain_id\u003dos_user_domain_id,"},{"line_number":856,"context_line":"            user_domain_name\u003dos_user_domain_name)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        # Now check for the password/token of which pieces of the"},{"line_number":859,"context_line":"        # identifying keyring key can come from the underlying client"},{"line_number":860,"context_line":"        if must_auth:"},{"line_number":861,"context_line":"            helper \u003d SecretsHelper(args, self.cs.client)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_f67c6222","side":"PARENT","line":858,"updated":"2017-01-26 12:00:36.000000000","message":"I am confused how we can drop all this now, looks like it got added here:\nhttps://github.com/openstack/python-novaclient/commit/7c6f538cf6bc86ecfd9cb25f1bf7f14a6652b592\n\nI guess this is for the HTTP Client only, but it feels like we must have broken something here. It feels like something that should now be done by keystoneauth.","commit_id":"9940e3fe0e47ff5f2f6d05c9564d17fc19ca0f5c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9560a8b44ab3ce49bb8a4447c1f8de634bd61760","unresolved":false,"context_lines":[{"line_number":855,"context_line":"            user_domain_id\u003dos_user_domain_id,"},{"line_number":856,"context_line":"            user_domain_name\u003dos_user_domain_name)"},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        # Now check for the password/token of which pieces of the"},{"line_number":859,"context_line":"        # identifying keyring key can come from the underlying client"},{"line_number":860,"context_line":"        if must_auth:"},{"line_number":861,"context_line":"            helper \u003d SecretsHelper(args, self.cs.client)"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_d187700d","side":"PARENT","line":858,"in_reply_to":"3a461143_f67c6222","updated":"2017-01-26 12:12:53.000000000","message":"yes, it is completely broken for a long time. After merging https://github.com/openstack/python-novaclient/commit/1f11840dd84f3570330d1fcd53d1e8eea5ff7922 SessionClient was created for 99% cases in CLI and HTTPClient was used only in case of --bypass-url argument and in via python-api (SecretsHelper is not used there).\n\nNot sure that is critical to fix now. At least, this patch fixes prompting password by SecretsHelper(without that patch, prompting password is done after initialization of SessionClient and the wrong field is change with it)","commit_id":"9940e3fe0e47ff5f2f6d05c9564d17fc19ca0f5c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a056ca264ee02a6188c87c3c82357ef0135b2b34","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            action(parser, namespace, values, option_string)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class SecretsHelper(object):"},{"line_number":214,"context_line":"    def __init__(self, args, client):"},{"line_number":215,"context_line":"        self.args \u003d args"},{"line_number":216,"context_line":"        self.client \u003d client"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_16d9eef3","line":213,"updated":"2017-01-26 12:00:36.000000000","message":"Should this be deleted now?","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9560a8b44ab3ce49bb8a4447c1f8de634bd61760","unresolved":false,"context_lines":[{"line_number":210,"context_line":"            action(parser, namespace, values, option_string)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"class SecretsHelper(object):"},{"line_number":214,"context_line":"    def __init__(self, args, client):"},{"line_number":215,"context_line":"        self.args \u003d args"},{"line_number":216,"context_line":"        self.client \u003d client"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_b120249d","line":213,"in_reply_to":"3a461143_16d9eef3","updated":"2017-01-26 12:12:53.000000000","message":"Actually, it is used for prompting password. I think the whole class can be simplified to just one method or we can restore old behaviour with saving credentials and token for simplifying auth steps, but it requires some time for investigations (imo, it can be done in Pike cycle)","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a056ca264ee02a6188c87c3c82357ef0135b2b34","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        parser.set_defaults(os_project_name\u003dutils.env("},{"line_number":406,"context_line":"            \u0027OS_PROJECT_NAME\u0027, \u0027OS_TENANT_NAME\u0027, \u0027NOVA_PROJECT_ID\u0027))"},{"line_number":407,"context_line":"        parser.set_defaults(os_project_id\u003dutils.env("},{"line_number":408,"context_line":"            \u0027OS_PROJECT_ID\u0027, \u0027OS_TENANT_ID\u0027))"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def get_base_parser(self, argv):"},{"line_number":411,"context_line":"        parser \u003d NovaClientArgumentParser("}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_b6abba88","line":408,"updated":"2017-01-26 12:00:36.000000000","message":"Feels like we are missing OS_TOKEN here?","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9560a8b44ab3ce49bb8a4447c1f8de634bd61760","unresolved":false,"context_lines":[{"line_number":405,"context_line":"        parser.set_defaults(os_project_name\u003dutils.env("},{"line_number":406,"context_line":"            \u0027OS_PROJECT_NAME\u0027, \u0027OS_TENANT_NAME\u0027, \u0027NOVA_PROJECT_ID\u0027))"},{"line_number":407,"context_line":"        parser.set_defaults(os_project_id\u003dutils.env("},{"line_number":408,"context_line":"            \u0027OS_PROJECT_ID\u0027, \u0027OS_TENANT_ID\u0027))"},{"line_number":409,"context_line":""},{"line_number":410,"context_line":"    def get_base_parser(self, argv):"},{"line_number":411,"context_line":"        parser \u003d NovaClientArgumentParser("}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_5132a0f2","line":408,"in_reply_to":"3a461143_b6abba88","updated":"2017-01-26 12:12:53.000000000","message":"Added it in separate patch.","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a056ca264ee02a6188c87c3c82357ef0135b2b34","unresolved":false,"context_lines":[{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        # We may have either, both or none of these."},{"line_number":661,"context_line":"        # If we have both, we don\u0027t need USERNAME, PASSWORD etc."},{"line_number":662,"context_line":"        # Fill in the blanks from the SecretsHelper if possible."},{"line_number":663,"context_line":"        # Finally, authenticate unless we have both."},{"line_number":664,"context_line":"        # Note if we don\u0027t auth we probably don\u0027t have a tenant ID so we can\u0027t"},{"line_number":665,"context_line":"        # cache the token."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_56fa9643","line":662,"updated":"2017-01-26 12:00:36.000000000","message":"Is that still valid?","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9560a8b44ab3ce49bb8a4447c1f8de634bd61760","unresolved":false,"context_lines":[{"line_number":659,"context_line":""},{"line_number":660,"context_line":"        # We may have either, both or none of these."},{"line_number":661,"context_line":"        # If we have both, we don\u0027t need USERNAME, PASSWORD etc."},{"line_number":662,"context_line":"        # Fill in the blanks from the SecretsHelper if possible."},{"line_number":663,"context_line":"        # Finally, authenticate unless we have both."},{"line_number":664,"context_line":"        # Note if we don\u0027t auth we probably don\u0027t have a tenant ID so we can\u0027t"},{"line_number":665,"context_line":"        # cache the token."}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_91940838","line":662,"in_reply_to":"3a461143_56fa9643","updated":"2017-01-26 12:12:53.000000000","message":"not sure, but I prefer to work closer of SecretsHelper class in separate patch","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"6dd74e5607e25c268b649b2775efcf9ef1b5f28a","unresolved":false,"context_lines":[{"line_number":680,"context_line":"            # be more user-friendly, i.e provide default values for domains"},{"line_number":681,"context_line":"            if (not args.os_project_domain_id and"},{"line_number":682,"context_line":"                    not args.os_project_domain_name):"},{"line_number":683,"context_line":"                setattr(args, \"os_project_domain_id\", \"default\")"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"            # os_user_domain_id is redundant in case of Token auth type"},{"line_number":686,"context_line":"            if not auth_token and (not args.os_user_domain_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_6990c296","line":683,"updated":"2017-01-25 16:14:33.000000000","message":"Should be no need to use setattr() here; you should just be able to do attribute assignment, e.g.:\n\n    args.os_project_domain_id \u003d \u0027default\u0027","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"86082a1ccd69e57fe3406549acf607e52029e8c0","unresolved":false,"context_lines":[{"line_number":680,"context_line":"            # be more user-friendly, i.e provide default values for domains"},{"line_number":681,"context_line":"            if (not args.os_project_domain_id and"},{"line_number":682,"context_line":"                    not args.os_project_domain_name):"},{"line_number":683,"context_line":"                setattr(args, \"os_project_domain_id\", \"default\")"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"            # os_user_domain_id is redundant in case of Token auth type"},{"line_number":686,"context_line":"            if not auth_token and (not args.os_user_domain_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_f5743f9d","line":683,"in_reply_to":"3a461143_5973c2b1","updated":"2017-01-26 19:58:30.000000000","message":"sorry, I must have been comparing to a previous patch set and saw these lines added without realizing they weren\u0027t part of your change.","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ec18c5aa5fcc919dfdfe4d3f860ef1de48934568","unresolved":false,"context_lines":[{"line_number":680,"context_line":"            # be more user-friendly, i.e provide default values for domains"},{"line_number":681,"context_line":"            if (not args.os_project_domain_id and"},{"line_number":682,"context_line":"                    not args.os_project_domain_name):"},{"line_number":683,"context_line":"                setattr(args, \"os_project_domain_id\", \"default\")"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"            # os_user_domain_id is redundant in case of Token auth type"},{"line_number":686,"context_line":"            if not auth_token and (not args.os_user_domain_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_db17aaeb","line":683,"in_reply_to":"3a461143_6990c296","updated":"2017-01-25 21:57:40.000000000","message":"Unrelated to that change,nope?","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"2f34f56e9d84baf7f808dc907db4a88566e93182","unresolved":false,"context_lines":[{"line_number":680,"context_line":"            # be more user-friendly, i.e provide default values for domains"},{"line_number":681,"context_line":"            if (not args.os_project_domain_id and"},{"line_number":682,"context_line":"                    not args.os_project_domain_name):"},{"line_number":683,"context_line":"                setattr(args, \"os_project_domain_id\", \"default\")"},{"line_number":684,"context_line":""},{"line_number":685,"context_line":"            # os_user_domain_id is redundant in case of Token auth type"},{"line_number":686,"context_line":"            if not auth_token and (not args.os_user_domain_id and"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_5973c2b1","line":683,"in_reply_to":"3a461143_6990c296","updated":"2017-01-25 22:20:09.000000000","message":"sorry, I experimented with L678-688 in several previous patch-sets. I have not succeeded in change that lines. I prefer leave it as it. At least in this patch","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a056ca264ee02a6188c87c3c82357ef0135b2b34","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        os_project_domain_id \u003d args.os_project_domain_id"},{"line_number":691,"context_line":"        os_project_domain_name \u003d args.os_project_domain_name"},{"line_number":692,"context_line":"        os_user_domain_id \u003d getattr(args, \"os_user_domain_id\", None)"},{"line_number":693,"context_line":"        os_user_domain_name \u003d getattr(args, \"os_user_domain_name\", None)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        endpoint_type \u003d args.endpoint_type"},{"line_number":696,"context_line":"        insecure \u003d args.insecure"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_36ba6a24","line":693,"updated":"2017-01-26 12:00:36.000000000","message":"This seems to suggest the above code should also use getattr?\n\nWould it not make sense to move line 678 below here, like you did in a previous patch?\n\nMaybe lets look at that in a follow up patch, given the time deadlines here.","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9560a8b44ab3ce49bb8a4447c1f8de634bd61760","unresolved":false,"context_lines":[{"line_number":690,"context_line":"        os_project_domain_id \u003d args.os_project_domain_id"},{"line_number":691,"context_line":"        os_project_domain_name \u003d args.os_project_domain_name"},{"line_number":692,"context_line":"        os_user_domain_id \u003d getattr(args, \"os_user_domain_id\", None)"},{"line_number":693,"context_line":"        os_user_domain_name \u003d getattr(args, \"os_user_domain_name\", None)"},{"line_number":694,"context_line":""},{"line_number":695,"context_line":"        endpoint_type \u003d args.endpoint_type"},{"line_number":696,"context_line":"        insecure \u003d args.insecure"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_11dbb87d","line":693,"in_reply_to":"3a461143_36ba6a24","updated":"2017-01-26 12:12:53.000000000","message":"\u003e Would it not make sense to move line 678 below here, like you did in a previous patch?\n\nI wasn\u0027t succeeded with it. I\u0027ll try again in follow-up patch","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"38dacfb1c0e3e0e71feea744623356ea5388eb99","unresolved":false,"context_lines":[{"line_number":649,"context_line":"            api_version \u003d api_versions.get_api_version("},{"line_number":650,"context_line":"                args.os_compute_api_version)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        # We may have either, both or none of these."},{"line_number":653,"context_line":"        # If we have both, we don\u0027t need USERNAME, PASSWORD etc."},{"line_number":654,"context_line":"        # Fill in the blanks from the SecretsHelper if possible."},{"line_number":655,"context_line":"        # Finally, authenticate unless we have both."}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_d460e1d1","line":652,"range":{"start_line":652,"start_character":10,"end_line":652,"end_character":52},"updated":"2017-11-16 16:16:59.000000000","message":"both of what? os_username and os_user_id? This comment isn\u0027t very clear.\n\nI see this comment was copied from below but I\u0027m not following it - maybe the comment used to make sense before rebase/refactor changed the meaning?","commit_id":"ba3011f6e5e69e7b06e60a7411343b7a3409b1e2"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"47f5a892109bab68ebe583fe6c2ac0e7f30be066","unresolved":false,"context_lines":[{"line_number":649,"context_line":"            api_version \u003d api_versions.get_api_version("},{"line_number":650,"context_line":"                args.os_compute_api_version)"},{"line_number":651,"context_line":""},{"line_number":652,"context_line":"        # We may have either, both or none of these."},{"line_number":653,"context_line":"        # If we have both, we don\u0027t need USERNAME, PASSWORD etc."},{"line_number":654,"context_line":"        # Fill in the blanks from the SecretsHelper if possible."},{"line_number":655,"context_line":"        # Finally, authenticate unless we have both."}],"source_content_type":"text/x-python","patch_set":11,"id":"1f485f77_4a3af398","line":652,"range":{"start_line":652,"start_character":10,"end_line":652,"end_character":52},"in_reply_to":"1f485f77_d460e1d1","updated":"2017-11-17 12:09:05.000000000","message":"yes, this comment is totally unclear and I suppose we can just remove it","commit_id":"ba3011f6e5e69e7b06e60a7411343b7a3409b1e2"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3b5c5eda82bf354e6106eb155bb2ca20c5dee8d","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # for os_username or os_password but for compatibility it is not."},{"line_number":578,"context_line":"        if must_auth and not skip_auth:"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"            if not auth_token and (not os_username and not os_user_id):"},{"line_number":581,"context_line":"                raise exc.CommandError("},{"line_number":582,"context_line":"                    _(\"You must provide a username \""},{"line_number":583,"context_line":"                      \"or user ID via --os-username, --os-user-id, \""}],"source_content_type":"text/x-python","patch_set":15,"id":"df87a7cf_21aab884","line":580,"updated":"2017-12-15 15:33:32.000000000","message":"Couldn\u0027t this be simplified to be:\n\nif not any([auth_token, os_username, os_user_id]):\n\n?","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88f8afd4c37765895dbed2248feb1b6b5173377e","unresolved":false,"context_lines":[{"line_number":577,"context_line":"        # for os_username or os_password but for compatibility it is not."},{"line_number":578,"context_line":"        if must_auth and not skip_auth:"},{"line_number":579,"context_line":""},{"line_number":580,"context_line":"            if not auth_token and (not os_username and not os_user_id):"},{"line_number":581,"context_line":"                raise exc.CommandError("},{"line_number":582,"context_line":"                    _(\"You must provide a username \""},{"line_number":583,"context_line":"                      \"or user ID via --os-username, --os-user-id, \""}],"source_content_type":"text/x-python","patch_set":15,"id":"df87a7cf_81c064e2","line":580,"in_reply_to":"df87a7cf_21aab884","updated":"2017-12-15 16:19:34.000000000","message":"Done","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"b3b5c5eda82bf354e6106eb155bb2ca20c5dee8d","unresolved":false,"context_lines":[{"line_number":579,"context_line":""},{"line_number":580,"context_line":"            if not auth_token and (not os_username and not os_user_id):"},{"line_number":581,"context_line":"                raise exc.CommandError("},{"line_number":582,"context_line":"                    _(\"You must provide a username \""},{"line_number":583,"context_line":"                      \"or user ID via --os-username, --os-user-id, \""},{"line_number":584,"context_line":"                      \"env[OS_USERNAME] or env[OS_USER_ID]\"))"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"            if not any([os_project_name, os_project_id]):"},{"line_number":587,"context_line":"                raise exc.CommandError(_(\"You must provide a project name or\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df87a7cf_c1c3cc56","line":584,"range":{"start_line":582,"start_character":20,"end_line":584,"end_character":61},"updated":"2017-12-15 15:33:32.000000000","message":"Or --os-token, right?","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"88f8afd4c37765895dbed2248feb1b6b5173377e","unresolved":false,"context_lines":[{"line_number":579,"context_line":""},{"line_number":580,"context_line":"            if not auth_token and (not os_username and not os_user_id):"},{"line_number":581,"context_line":"                raise exc.CommandError("},{"line_number":582,"context_line":"                    _(\"You must provide a username \""},{"line_number":583,"context_line":"                      \"or user ID via --os-username, --os-user-id, \""},{"line_number":584,"context_line":"                      \"env[OS_USERNAME] or env[OS_USER_ID]\"))"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"            if not any([os_project_name, os_project_id]):"},{"line_number":587,"context_line":"                raise exc.CommandError(_(\"You must provide a project name or\""}],"source_content_type":"text/x-python","patch_set":15,"id":"df87a7cf_81338413","line":584,"range":{"start_line":582,"start_character":20,"end_line":584,"end_character":61},"in_reply_to":"df87a7cf_c1c3cc56","updated":"2017-12-15 16:19:34.000000000","message":"Done","commit_id":"add54c090a5d0219fc79648d44d27e58a0bea67c"}],"novaclient/tests/functional/test_auth.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"34f9a6a0ffdab1ae5bdff6bcf80df707cb964095","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            flags \u003d (\u0027--os-username %(username)s --os-tenant-name \u0027"},{"line_number":56,"context_line":"                     \u0027%(project_name)s %(token_flag)s %(token)s \u0027"},{"line_number":57,"context_line":"                     \u0027--os-auth-url %(auth_url)s --os-endpoint-type publicURL\u0027"},{"line_number":58,"context_line":"                     % {\"username\": self.cli_clients.username,"},{"line_number":59,"context_line":"                        \"project_name\": self.project_name,"},{"line_number":60,"context_line":"                        \"token_flag\": token_flag,"},{"line_number":61,"context_line":"                        \"token\": token,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_f0174ca0","line":58,"range":{"start_line":58,"start_character":24,"end_line":58,"end_character":62},"updated":"2017-01-24 14:20:11.000000000","message":"Surely user name is not required? I know the current code requires it, but that sounds like a bug.\n\nIts not required by this constructor:\nhttps://github.com/openstack/keystoneauth/blob/master/keystoneauth1/identity/v3/token.py#L35","commit_id":"12074807939c095e9f9a5d224c1dfb1d7b8064b1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"d7161a889a7c79fe44a7a82233de2e1ac22c34c8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            flags \u003d (\u0027--os-username %(username)s --os-tenant-name \u0027"},{"line_number":56,"context_line":"                     \u0027%(project_name)s %(token_flag)s %(token)s \u0027"},{"line_number":57,"context_line":"                     \u0027--os-auth-url %(auth_url)s --os-endpoint-type publicURL\u0027"},{"line_number":58,"context_line":"                     % {\"username\": self.cli_clients.username,"},{"line_number":59,"context_line":"                        \"project_name\": self.project_name,"},{"line_number":60,"context_line":"                        \"token_flag\": token_flag,"},{"line_number":61,"context_line":"                        \"token\": token,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_fb81edc3","line":58,"range":{"start_line":58,"start_character":24,"end_line":58,"end_character":62},"in_reply_to":"5a3905b3_f0174ca0","updated":"2017-01-24 14:32:49.000000000","message":"Done","commit_id":"12074807939c095e9f9a5d224c1dfb1d7b8064b1"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"01c1f227260d067a50565914a61cb869592c633b","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            flags \u003d (\u0027--os-username %(username)s --os-tenant-name \u0027"},{"line_number":56,"context_line":"                     \u0027%(project_name)s %(token_flag)s %(token)s \u0027"},{"line_number":57,"context_line":"                     \u0027--os-auth-url %(auth_url)s --os-endpoint-type publicURL\u0027"},{"line_number":58,"context_line":"                     % {\"username\": self.cli_clients.username,"},{"line_number":59,"context_line":"                        \"project_name\": self.project_name,"},{"line_number":60,"context_line":"                        \"token_flag\": token_flag,"},{"line_number":61,"context_line":"                        \"token\": token,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5a3905b3_bb2e8540","line":58,"range":{"start_line":58,"start_character":24,"end_line":58,"end_character":62},"in_reply_to":"5a3905b3_f0174ca0","updated":"2017-01-24 14:26:39.000000000","message":"you are right.","commit_id":"12074807939c095e9f9a5d224c1dfb1d7b8064b1"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"a056ca264ee02a6188c87c3c82357ef0135b2b34","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        flags \u003d (\u0027--os-tenant-name %(project_name)s --os-token %(token)s \u0027"},{"line_number":55,"context_line":"                 \u0027--os-auth-url %(auth_url)s --os-endpoint-type publicURL\u0027"},{"line_number":56,"context_line":"                 % {\"project_name\": self.project_name,"},{"line_number":57,"context_line":"                    \"token\": token, \"auth_url\": auth_url})"},{"line_number":58,"context_line":"        if self.cli_clients.insecure:"},{"line_number":59,"context_line":"            flags +\u003d \u0027 --insecure \u0027"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_d69e8655","line":57,"updated":"2017-01-26 12:00:36.000000000","message":"Should we not have tests for using environment variables too, I guess thats a follow on patch.","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"},{"author":{"_account_id":9545,"name":"Andriy Kurilin","email":"andr.kurilin@gmail.com","username":"akurilin"},"change_message_id":"9560a8b44ab3ce49bb8a4447c1f8de634bd61760","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        flags \u003d (\u0027--os-tenant-name %(project_name)s --os-token %(token)s \u0027"},{"line_number":55,"context_line":"                 \u0027--os-auth-url %(auth_url)s --os-endpoint-type publicURL\u0027"},{"line_number":56,"context_line":"                 % {\"project_name\": self.project_name,"},{"line_number":57,"context_line":"                    \"token\": token, \"auth_url\": auth_url})"},{"line_number":58,"context_line":"        if self.cli_clients.insecure:"},{"line_number":59,"context_line":"            flags +\u003d \u0027 --insecure \u0027"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"3a461143_d19e9055","line":57,"in_reply_to":"3a461143_d69e8655","updated":"2017-01-26 12:12:53.000000000","message":"will do","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"}],"releasenotes/notes/fix-token-auth-6c48c63a759f51d5.yaml":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"de05c6d595c70411c7d8944040038700f7dd068f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fix ability to authenticate using Keystone Token via CLI."},{"line_number":4,"context_line":"  - Fix ability to authenticate using Keystone Token via python API."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"5a3905b3_f6c824aa","line":4,"updated":"2017-01-24 14:42:42.000000000","message":"Those two fixes are pretty correlated. I would have marked them as a single bullet and explain that it fixes a regression appearing in 7.0.0.","commit_id":"2b5d33ce6018603c5807ab814cbfc6dce9ae6f32"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"129d5902bcb709072175666d416f49cb2eadcace","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - Fix an ability to authenticate using Keystone Token which was broken with"},{"line_number":4,"context_line":"    novaclient 7.0.0 release."}],"source_content_type":"text/x-yaml","patch_set":10,"id":"1f485f77_3943ae6e","line":2,"updated":"2017-11-16 16:09:20.000000000","message":"This was already introduced in ocata:\n\nhttps://review.openstack.org/#/c/425822/\n\nSo I\u0027m confused why it\u0027s re-added here. Where did the actual fix happen in Ocata? Was that release note bogus, or did we fix this some other way and this change is actually no longer necessary?","commit_id":"7ef6ce258afab34f6b42ef11e80880875d4d69fa"}]}
