)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e90f23a62832d3e0bb010f88dc47d4e96bb915f","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Service token will be passed along with user token to communicate with"},{"line_number":10,"context_line":"services when dealing with long running tasks like snapshots."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch also adopts keystoneauth with glance client."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I02be31bbe2de54c69210934b234ed380daca4fda"},{"line_number":15,"context_line":"Implements: blueprint use-service-tokens"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"ba5201f7_3ccbc554","line":12,"updated":"2017-01-12 02:13:10.000000000","message":"Shouldn\u0027t this be a separate change? i.e. do this first, then rebase the service token stuff on top of that.","commit_id":"b117b7031a0cfb5fca8184a41c77e36c2ea5fceb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e6d3e69d552d9d30180c745ef3806c7a36c5c12","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adopts keystoneauth with glance client."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Migrate Glance client to Keystonesuth to make it"},{"line_number":10,"context_line":"consistent with Cinder and Neutron clients."},{"line_number":11,"context_line":"This will help Glance client to use service token"},{"line_number":12,"context_line":"functionality"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I02be31bbe2de54c69210934b234ed380daca4fda"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a3905b3_ed178142","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":13},"updated":"2017-01-24 09:35:47.000000000","message":"So this is only partially done. We should note that we keep the use of the api_servers variable, rather than fetching from the service catalog.\n\nThis is just whats needed to enable the service token stuff.","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"93896e8f04cfe189d3d0bd7e5df8128a7da82d7f","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adopts keystoneauth with glance client."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Migrate Glance client to Keystonesuth to make it"},{"line_number":10,"context_line":"consistent with Cinder and Neutron clients."},{"line_number":11,"context_line":"This will help Glance client to use service token"},{"line_number":12,"context_line":"functionality"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I02be31bbe2de54c69210934b234ed380daca4fda"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a3905b3_3350f05e","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":13},"in_reply_to":"5a3905b3_ed178142","updated":"2017-01-24 18:04:04.000000000","message":"Done","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e6d3e69d552d9d30180c745ef3806c7a36c5c12","unresolved":false,"context_lines":[{"line_number":10,"context_line":"consistent with Cinder and Neutron clients."},{"line_number":11,"context_line":"This will help Glance client to use service token"},{"line_number":12,"context_line":"functionality"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I02be31bbe2de54c69210934b234ed380daca4fda"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a3905b3_cd5485cb","line":13,"updated":"2017-01-24 09:35:47.000000000","message":"Nit: I would include the service token blueprint here still. Even if you just say related to blueprint xxx","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"93896e8f04cfe189d3d0bd7e5df8128a7da82d7f","unresolved":false,"context_lines":[{"line_number":10,"context_line":"consistent with Cinder and Neutron clients."},{"line_number":11,"context_line":"This will help Glance client to use service token"},{"line_number":12,"context_line":"functionality"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I02be31bbe2de54c69210934b234ed380daca4fda"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5a3905b3_734a78ae","line":13,"in_reply_to":"5a3905b3_cd5485cb","updated":"2017-01-24 18:04:04.000000000","message":"Done","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"}],"nova/conf/glance.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06a7e334f0b6961281c4de2d96366bdf364ad618","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    conf.register_group(glance_group)"},{"line_number":96,"context_line":"    conf.register_opts(glance_opts, group\u003dglance_group)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # TODO(johngarbutt) we need to add alias options in here"},{"line_number":99,"context_line":"    # api_insecure, cert_file, key_file and ca_file all need deprecating"},{"line_number":100,"context_line":"    # but need to check if anyone else is also using these ssl group options"},{"line_number":101,"context_line":"    deprecated \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a3c09a3_59dd7841","line":98,"updated":"2017-01-13 15:30:50.000000000","message":"Lets drop this now its done below.","commit_id":"b765fbfb5534e0db566555511f642e243ca7bcff"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"2411909daa895831fa293980992db9f9850d9472","unresolved":false,"context_lines":[{"line_number":95,"context_line":"    conf.register_group(glance_group)"},{"line_number":96,"context_line":"    conf.register_opts(glance_opts, group\u003dglance_group)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    # TODO(johngarbutt) we need to add alias options in here"},{"line_number":99,"context_line":"    # api_insecure, cert_file, key_file and ca_file all need deprecating"},{"line_number":100,"context_line":"    # but need to check if anyone else is also using these ssl group options"},{"line_number":101,"context_line":"    deprecated \u003d {"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a3c09a3_803758af","line":98,"in_reply_to":"7a3c09a3_59dd7841","updated":"2017-01-13 18:02:08.000000000","message":"Done","commit_id":"b765fbfb5534e0db566555511f642e243ca7bcff"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06a7e334f0b6961281c4de2d96366bdf364ad618","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        \u0027keyfile\u0027: [cfg.DeprecatedOpt(\u0027key_file\u0027,"},{"line_number":109,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":110,"context_line":"    }"},{"line_number":111,"context_line":"    ks_loading.register_session_conf_options(conf, glance_group.name,"},{"line_number":112,"context_line":"                                             deprecated)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a3c09a3_b9a01c92","line":111,"updated":"2017-01-13 15:30:50.000000000","message":"We really need a release note for the deprecation of those old configs, and the addition of things like auth_url here.\n\nAs an aside, I think devstack will need updating to add in the auth_url, but I don\u0027t think we will use/need the auth_url until the service token stuff is added, so lets worry about that later.","commit_id":"b765fbfb5534e0db566555511f642e243ca7bcff"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"2411909daa895831fa293980992db9f9850d9472","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        \u0027keyfile\u0027: [cfg.DeprecatedOpt(\u0027key_file\u0027,"},{"line_number":109,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":110,"context_line":"    }"},{"line_number":111,"context_line":"    ks_loading.register_session_conf_options(conf, glance_group.name,"},{"line_number":112,"context_line":"                                             deprecated)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"7a3c09a3_a03c5494","line":111,"in_reply_to":"7a3c09a3_b9a01c92","updated":"2017-01-13 18:02:08.000000000","message":"Done","commit_id":"b765fbfb5534e0db566555511f642e243ca7bcff"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e6d3e69d552d9d30180c745ef3806c7a36c5c12","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    # requires configuration. Eventually this will come from the"},{"line_number":26,"context_line":"    # service catalog, however we don\u0027t have a good path there atm."},{"line_number":27,"context_line":"    # TODO(raj_singh): Add \"required\u003dTrue\" flag to this option."},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027api_servers\u0027,"},{"line_number":29,"context_line":"        deprecated_for_removal\u003dTrue,"},{"line_number":30,"context_line":"        deprecated_since\u003d\u002715.0.0\u0027,"},{"line_number":31,"context_line":"        deprecated_reason\u003d\"\"\""},{"line_number":32,"context_line":"As Glance client adopts keystoneauth, this option is not used anymore in nova."},{"line_number":33,"context_line":"\"\"\","},{"line_number":34,"context_line":"        help\u003d\"\"\""},{"line_number":35,"context_line":"List of glance api servers endpoints available to nova."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_e27b10bc","line":33,"range":{"start_line":28,"start_character":0,"end_line":33,"end_character":4},"updated":"2017-01-24 09:35:47.000000000","message":"So I think its too soon for this one, because you don\u0027t yet let the users configure the service catalog entry to pick, and we haven\u0027t gone looking for that.\n\nWe need to be able to tell people what to do instead, and we haven\u0027t got that bit sorted yet.","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"93896e8f04cfe189d3d0bd7e5df8128a7da82d7f","unresolved":false,"context_lines":[{"line_number":25,"context_line":"    # requires configuration. Eventually this will come from the"},{"line_number":26,"context_line":"    # service catalog, however we don\u0027t have a good path there atm."},{"line_number":27,"context_line":"    # TODO(raj_singh): Add \"required\u003dTrue\" flag to this option."},{"line_number":28,"context_line":"    cfg.ListOpt(\u0027api_servers\u0027,"},{"line_number":29,"context_line":"        deprecated_for_removal\u003dTrue,"},{"line_number":30,"context_line":"        deprecated_since\u003d\u002715.0.0\u0027,"},{"line_number":31,"context_line":"        deprecated_reason\u003d\"\"\""},{"line_number":32,"context_line":"As Glance client adopts keystoneauth, this option is not used anymore in nova."},{"line_number":33,"context_line":"\"\"\","},{"line_number":34,"context_line":"        help\u003d\"\"\""},{"line_number":35,"context_line":"List of glance api servers endpoints available to nova."},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"5a3905b3_d3cfac27","line":33,"range":{"start_line":28,"start_character":0,"end_line":33,"end_character":4},"in_reply_to":"5a3905b3_e27b10bc","updated":"2017-01-24 18:04:04.000000000","message":"Done","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4e5b082e84dc6b8ad5df74147812cfd7c36c9ba","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    deprecated \u003d {"},{"line_number":99,"context_line":"        \u0027insecure\u0027: [cfg.DeprecatedOpt(\u0027api_insecure\u0027,"},{"line_number":100,"context_line":"                        group\u003dglance_group.name)],"},{"line_number":101,"context_line":"        \u0027cafile\u0027: [cfg.DeprecatedOpt(\u0027ca_file\u0027,"},{"line_number":102,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":103,"context_line":"        \u0027certfile\u0027: [cfg.DeprecatedOpt(\u0027cert_file\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a461143_d60951df","line":100,"updated":"2017-01-25 16:06:18.000000000","message":"We need to delete where we used to define api_insecure:\nhttps://github.com/openstack/nova/blob/master/nova/conf/glance.py#L38","commit_id":"16c7947922f991149a09052c9e4260d8a73b68b5"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3e1f52b288e474687264d60fc7cf7f7d17d9a7dd","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    conf.register_group(glance_group)"},{"line_number":88,"context_line":"    conf.register_opts(glance_opts, group\u003dglance_group)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    deprecated \u003d {"},{"line_number":91,"context_line":"        \u0027insecure\u0027: [cfg.DeprecatedOpt(\u0027api_insecure\u0027,"},{"line_number":92,"context_line":"                        group\u003dglance_group.name)],"},{"line_number":93,"context_line":"        \u0027cafile\u0027: [cfg.DeprecatedOpt(\u0027ca_file\u0027,"},{"line_number":94,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":95,"context_line":"        \u0027certfile\u0027: [cfg.DeprecatedOpt(\u0027cert_file\u0027,"},{"line_number":96,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":97,"context_line":"        \u0027keyfile\u0027: [cfg.DeprecatedOpt(\u0027key_file\u0027,"},{"line_number":98,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":"    ks_loading.register_session_conf_options(conf, glance_group.name,"},{"line_number":101,"context_line":"                                             deprecated)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f231b9d_77c6386a","line":101,"range":{"start_line":90,"start_character":0,"end_line":101,"end_character":56},"updated":"2017-06-12 15:49:38.000000000","message":"This is slightly unusual - refer to the keystoneauth docs for same [1] for more info\n\n[1] https://github.com/openstack/keystoneauth/blob/2.20.0/keystoneauth1/loading/session.py#L183-L207","commit_id":"cf5be954d36ffa5fb2b15ef07fa575d2ea595746"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8af8af4a8439b1b80928488c696c0e1ae09b0027","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    conf.register_group(glance_group)"},{"line_number":88,"context_line":"    conf.register_opts(glance_opts, group\u003dglance_group)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    deprecated \u003d {"},{"line_number":91,"context_line":"        \u0027insecure\u0027: [cfg.DeprecatedOpt(\u0027api_insecure\u0027,"},{"line_number":92,"context_line":"                        group\u003dglance_group.name)],"},{"line_number":93,"context_line":"        \u0027cafile\u0027: [cfg.DeprecatedOpt(\u0027ca_file\u0027,"},{"line_number":94,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":95,"context_line":"        \u0027certfile\u0027: [cfg.DeprecatedOpt(\u0027cert_file\u0027,"},{"line_number":96,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":97,"context_line":"        \u0027keyfile\u0027: [cfg.DeprecatedOpt(\u0027key_file\u0027,"},{"line_number":98,"context_line":"                        group\u003d\"ssl\")],"},{"line_number":99,"context_line":"    }"},{"line_number":100,"context_line":"    ks_loading.register_session_conf_options(conf, glance_group.name,"},{"line_number":101,"context_line":"                                             deprecated)"},{"line_number":102,"context_line":""},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":15,"id":"7f231b9d_178384ce","line":101,"range":{"start_line":90,"start_character":0,"end_line":101,"end_character":56},"in_reply_to":"7f231b9d_77c6386a","updated":"2017-06-12 15:54:12.000000000","message":"*This is slightly unusual but it is correct. Refer to the docs for the reason why we do things this way","commit_id":"cf5be954d36ffa5fb2b15ef07fa575d2ea595746"}],"nova/image/glance.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b75b2b33bb102a49c4d0f361b88aebcdc301310c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"    return glanceclient.Client(str(version),"},{"line_number":124,"context_line":"                               endpoint,"},{"line_number":125,"context_line":"                               session\u003dauth,"},{"line_number":126,"context_line":"                               **params)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"def get_api_servers():"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a6eadb0_f97b58f2","line":126,"updated":"2016-12-20 11:16:26.000000000","message":"So I think there is a bit more conversion to do here. The insecure stuff, I guess should be held in a load_session_from_conf_options thingy?\n\nThe gate is showing the params you passed in here as unexpected (well the insecure param is raising an error, for sure).\n\n\nLooking over here:\nhttps://github.com/openstack/nova/blob/master/nova/network/neutronv2/api.py#L146\n\nYou see this:\n\n        clientv20.Client(session\u003d_SESSION,\n                         auth\u003dauth_plugin,\n                         endpoint_override\u003dCONF.neutron.url,\n                         region_name\u003dCONF.neutron.region_name),\n\nwhere:\n\n  _SESSION \u003d ks_loading.load_session_from_conf_options(\n            CONF, nova.conf.neutron.NEUTRON_GROUP)\n\nThe above will replace all the cert config, and insecure, etc. I believe.\n\nAnd auth is the same as your auth above.","commit_id":"a807a0cd34b2488ba841f86c9fb70068c7b50a93"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"03a058577e8c50654a432bef9d3e0905cbec491e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    return (image_id, endpoint)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"def generate_identity_headers(context, status\u003d\u0027Confirmed\u0027):"},{"line_number":95,"context_line":"    return {"},{"line_number":96,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":97,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a461143_22e5cc08","line":94,"updated":"2017-01-26 10:22:22.000000000","message":"Nit: its tempting to add a comment here saying its only used by the XenAPI driver now. That needs reworking to avoid doing this sort of thing.","commit_id":"ae148aaab07a525753a33fcfc1191138813f5257"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"51912dfc00d7099f7e62d5552c2496e695ac1fef","unresolved":false,"context_lines":[{"line_number":52,"context_line":"_SESSION \u003d None"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def reset_globals():"},{"line_number":56,"context_line":"    \"\"\"Testing method to reset globals."},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":"    global _SESSION"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_17931efb","line":55,"range":{"start_line":55,"start_character":4,"end_line":55,"end_character":17},"updated":"2017-01-31 01:55:50.000000000","message":"I\u0027d really prefer to avoid doing this. Can\u0027t we simply handle mocking out the _SESSION global with mock, like we do here:\n\n5593049ace9617c1bd15e4a0f4d57208c3c66228","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"aff9f51a2fe161261c0668a5621662f2bdcfaabd","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    return (image_id, endpoint)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def generate_identity_headers(context, status\u003d\u0027Confirmed\u0027):"},{"line_number":102,"context_line":"    return {"},{"line_number":103,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":104,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"},{"line_number":105,"context_line":"        \u0027X-Tenant-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":106,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":107,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":108,"context_line":"    }"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"def get_api_servers():"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_01be63fe","line":108,"range":{"start_line":101,"start_character":0,"end_line":108,"end_character":5},"updated":"2017-01-31 16:12:36.000000000","message":"Did we loose the test for this method? My bad, I missed it.","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":18335,"name":"Pushkar Umaranikar","email":"pushkar.umaranikar@intel.com","username":"pushkarumaranikar"},"change_message_id":"82a603262f7fead0912d1d5841bc3dc281514ae0","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    return (image_id, endpoint)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"def generate_identity_headers(context, status\u003d\u0027Confirmed\u0027):"},{"line_number":102,"context_line":"    return {"},{"line_number":103,"context_line":"        \u0027X-Auth-Token\u0027: getattr(context, \u0027auth_token\u0027, None),"},{"line_number":104,"context_line":"        \u0027X-User-Id\u0027: getattr(context, \u0027user\u0027, None),"},{"line_number":105,"context_line":"        \u0027X-Tenant-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":106,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":107,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":108,"context_line":"    }"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"def get_api_servers():"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_81deccda","line":108,"range":{"start_line":101,"start_character":0,"end_line":108,"end_character":5},"in_reply_to":"3a461143_01be63fe","updated":"2017-01-31 19:09:09.000000000","message":"I think here onwards this method will only be called from xenapi in case of download_image and upload_image function calls.\nhttps://github.com/openstack/nova/blob/master/nova/virt/xenapi/image/glance.py\n\nIt has test coverage under https://github.com/openstack/nova/blob/master/nova/tests/unit/virt/xenapi/image/test_glance.py#L76","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2a0e35d4b4db94d5eadab423d40db6d8f3a58faa","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        \u0027X-Tenant-Id\u0027: getattr(context, \u0027tenant\u0027, None),"},{"line_number":82,"context_line":"        \u0027X-Roles\u0027: \u0027,\u0027.join(getattr(context, \u0027roles\u0027, [])),"},{"line_number":83,"context_line":"        \u0027X-Identity-Status\u0027: status,"},{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"def _glanceclient_from_endpoint(context, endpoint, version\u003d1):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_e010515b","side":"PARENT","line":84,"updated":"2017-02-01 11:34:47.000000000","message":"We are still missing the new test for this method.","commit_id":"f9d7b383a7cb12b6cd3e6117daf69b08620bf40f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"abf0680fb6c8e5ffeda4862ba854b23824f29985","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    # TODO(johngarbutt) eventually we should default to getting the"},{"line_number":66,"context_line":"    # endpoint URL from the service catalog."},{"line_number":67,"context_line":"    return glanceclient.Client(version, session\u003d_SESSION, auth\u003dauth,"},{"line_number":68,"context_line":"                               endpoint_override\u003dendpoint)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def generate_glance_url():"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_d3c30c38","line":68,"updated":"2017-06-06 20:04:13.000000000","message":"Need to send the global_request_id","commit_id":"66651333fecf4b796f2c2ee4e4e3e5c17fc1158b"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"10e5ef773a70231717181547d9a567043e51b245","unresolved":false,"context_lines":[{"line_number":65,"context_line":"    # TODO(johngarbutt) eventually we should default to getting the"},{"line_number":66,"context_line":"    # endpoint URL from the service catalog."},{"line_number":67,"context_line":"    return glanceclient.Client(version, session\u003d_SESSION, auth\u003dauth,"},{"line_number":68,"context_line":"                               endpoint_override\u003dendpoint)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def generate_glance_url():"}],"source_content_type":"text/x-python","patch_set":29,"id":"df140735_3338083c","line":68,"in_reply_to":"df140735_d3c30c38","updated":"2017-06-06 20:04:47.000000000","message":"Done","commit_id":"66651333fecf4b796f2c2ee4e4e3e5c17fc1158b"}],"nova/tests/unit/image/test_glance.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"5724f0b88a47a8f570290f7c0fda08360e2d7d45","unresolved":false,"context_lines":[{"line_number":340,"context_line":""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"class TestCreateGlanceClient(test.NoDBTestCase):"},{"line_number":343,"context_line":"    @mock.patch.object(glance, \u0027_SESSION\u0027)"},{"line_number":344,"context_line":"    @mock.patch.object(ks_loading, \u0027load_session_from_conf_options\u0027)"},{"line_number":345,"context_line":"    def test_glanceclient_session_cached(self,"},{"line_number":346,"context_line":"                                        load_session,"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a461143_aca186ab","line":343,"updated":"2017-01-27 03:42:33.000000000","message":"I don\u0027t think you can mock the global this way, we\u0027ve had similar issues in the cinder tests - you\u0027d have to see how those are doing the mocking on the global. Because it\u0027s causing the next test to intermittently fail:\n\nhttp://logs.openstack.org/34/412634/15/check/gate-nova-python27-db-ubuntu-xenial/a626d06/console.html#_2017-01-27_02_45_43_563194","commit_id":"cf5be954d36ffa5fb2b15ef07fa575d2ea595746"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ae5794b5980dccd140ca3ee8a8b006bcd6cc6577","unresolved":false,"context_lines":[{"line_number":345,"context_line":"        super(TestCreateGlanceClient, self).setUp()"},{"line_number":346,"context_line":"        glance.reset_globals()"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"    @mock.patch.object(ks_loading, \u0027load_session_from_conf_options\u0027)"},{"line_number":349,"context_line":"    def test_glanceclient_session_cached(self,"},{"line_number":350,"context_line":"                                        load_session):"},{"line_number":351,"context_line":"        ctx \u003d context.RequestContext(\u0027fake\u0027, \u0027fake\u0027, auth_token\u003d\u0027token\u0027)"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        expected_endpoint \u003d \u0027http://host4:9295\u0027"},{"line_number":354,"context_line":"        fake_session \u003d mock.Mock(expected_endpoint)"},{"line_number":355,"context_line":""},{"line_number":356,"context_line":"        with mock.patch.object(glance, \u0027_SESSION\u0027, fake_session):"},{"line_number":357,"context_line":"            glance._glanceclient_from_endpoint(ctx, expected_endpoint)"},{"line_number":358,"context_line":"            load_session.assert_not_called()"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"    @mock.patch.object(context.RequestContext, \u0027get_auth_plugin\u0027)"},{"line_number":361,"context_line":"    @mock.patch.object(ks_loading, \u0027load_session_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_41506b0b","line":358,"range":{"start_line":348,"start_character":0,"end_line":358,"end_character":44},"updated":"2017-01-31 16:09:49.000000000","message":"Lets drop this, its confusing with the whole reset_globals() thing.","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ae5794b5980dccd140ca3ee8a8b006bcd6cc6577","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        load_session.return_value \u003d \"fake\""},{"line_number":372,"context_line":""},{"line_number":373,"context_line":"        glance._glanceclient_from_endpoint(ctx, expected_endpoint)"},{"line_number":374,"context_line":"        init_mock.assert_called_once_with(\u00271\u0027,"},{"line_number":375,"context_line":"                                          auth\u003d\"fake_auth\","},{"line_number":376,"context_line":"                                          endpoint_override\u003dexpected_endpoint,"},{"line_number":377,"context_line":"                                          session\u003d\"fake\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_c1b29b4b","line":374,"range":{"start_line":374,"start_character":42,"end_line":374,"end_character":45},"updated":"2017-01-31 16:09:49.000000000","message":"This method is only ever called with 2 (the int) here, I believe, so lets change that here so it matches.","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ae5794b5980dccd140ca3ee8a8b006bcd6cc6577","unresolved":false,"context_lines":[{"line_number":375,"context_line":"                                          auth\u003d\"fake_auth\","},{"line_number":376,"context_line":"                                          endpoint_override\u003dexpected_endpoint,"},{"line_number":377,"context_line":"                                          session\u003d\"fake\")"},{"line_number":378,"context_line":"        load_session.assert_called_once()"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    @mock.patch.object(context.RequestContext, \u0027get_auth_plugin\u0027)"},{"line_number":381,"context_line":"    @mock.patch.object(ks_loading, \u0027load_session_from_conf_options\u0027)"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_014bc359","line":378,"updated":"2017-01-31 16:09:49.000000000","message":"I would simply extend this tests.\n\nFirst do glance._SESSION \u003d None (i.e. drop the reset globals stuff)\n\nThen call _glanceclient_from_endpoint and ensure load_session is only called once.","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"ae5794b5980dccd140ca3ee8a8b006bcd6cc6577","unresolved":false,"context_lines":[{"line_number":377,"context_line":"                                          session\u003d\"fake\")"},{"line_number":378,"context_line":"        load_session.assert_called_once()"},{"line_number":379,"context_line":""},{"line_number":380,"context_line":"    @mock.patch.object(context.RequestContext, \u0027get_auth_plugin\u0027)"},{"line_number":381,"context_line":"    @mock.patch.object(ks_loading, \u0027load_session_from_conf_options\u0027)"},{"line_number":382,"context_line":"    @mock.patch(\u0027glanceclient.Client\u0027)"},{"line_number":383,"context_line":"    def test_glanceclient_with_diff_versions(self,"},{"line_number":384,"context_line":"                                             init_mock,"},{"line_number":385,"context_line":"                                             load_session,"},{"line_number":386,"context_line":"                                             fake_service_auth):"},{"line_number":387,"context_line":"        ctx \u003d context.RequestContext(\u0027fake\u0027, \u0027fake\u0027, auth_token\u003d\u0027token\u0027)"},{"line_number":388,"context_line":""},{"line_number":389,"context_line":"        expected_endpoint \u003d \u0027http://host4:9295\u0027"},{"line_number":390,"context_line":"        fake_service_auth.return_value \u003d \"fake_auth\""},{"line_number":391,"context_line":"        load_session.return_value \u003d \"fake\""},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        glance._glanceclient_from_endpoint(ctx, expected_endpoint)"},{"line_number":394,"context_line":"        init_mock.assert_called_once_with(\u00271\u0027,"},{"line_number":395,"context_line":"                                          auth\u003d\"fake_auth\","},{"line_number":396,"context_line":"                                          endpoint_override\u003dexpected_endpoint,"},{"line_number":397,"context_line":"                                          session\u003d\"fake\")"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"        # Test the version is properly passed to glanceclient."},{"line_number":400,"context_line":"        init_mock.reset_mock()"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":"        glance._glanceclient_from_endpoint(ctx, expected_endpoint, version\u003d2)"},{"line_number":403,"context_line":"        init_mock.assert_called_once_with(\u00272\u0027,"},{"line_number":404,"context_line":"                                          auth\u003d\"fake_auth\","},{"line_number":405,"context_line":"                                          endpoint_override\u003dexpected_endpoint,"},{"line_number":406,"context_line":"                                          session\u003d\"fake\")"},{"line_number":407,"context_line":""},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"class TestGlanceClientWrapperRetries(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":21,"id":"3a461143_215d1f15","line":406,"range":{"start_line":380,"start_character":4,"end_line":406,"end_character":57},"updated":"2017-01-31 16:09:49.000000000","message":"We test the version above already, I would just just drop this.","commit_id":"215e52afd6f8279eb07c0adcc42d4a78d47f338d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2a0e35d4b4db94d5eadab423d40db6d8f3a58faa","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        expected_endpoint \u003d \u0027http://host4:9295\u0027"},{"line_number":358,"context_line":"        fake_session \u003d mock.Mock(expected_endpoint)"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        load_session.return_value \u003d fake_session"},{"line_number":361,"context_line":""},{"line_number":362,"context_line":"        glance._glanceclient_from_endpoint(ctx, expected_endpoint, version\u003d2)"},{"line_number":363,"context_line":"        init_mock.assert_called_once_with(2,"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_4023e5bc","line":360,"updated":"2017-02-01 11:34:47.000000000","message":"Sorry, I don\u0027t really understand what the aim is here? why not just not set the return_value, so it defaults to returning a generic Mock?","commit_id":"f539d67997eb306a7ad1bcdbc5a97d88f2ad3e5e"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"2a0e35d4b4db94d5eadab423d40db6d8f3a58faa","unresolved":false,"context_lines":[{"line_number":370,"context_line":"        load_session.reset_mock()"},{"line_number":371,"context_line":""},{"line_number":372,"context_line":"        glance._glanceclient_from_endpoint(ctx, expected_endpoint, version\u003d2)"},{"line_number":373,"context_line":"        load_session.assert_not_called()"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":""},{"line_number":376,"context_line":"class TestGlanceClientWrapperRetries(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":22,"id":"3a461143_207a59bd","line":373,"updated":"2017-02-01 11:34:47.000000000","message":"This seems really overcomplicated.\n\nYou can do the assert_called_once_with at the end of the test, after having called _glanceclient_from_endpoint twice.","commit_id":"f539d67997eb306a7ad1bcdbc5a97d88f2ad3e5e"}],"nova/virt/xenapi/image/glance.py":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b4e5b082e84dc6b8ad5df74147812cfd7c36c9ba","unresolved":false,"context_lines":[{"line_number":57,"context_line":"    def _make_params(self, context, session, image_id):"},{"line_number":58,"context_line":"        return {\u0027image_id\u0027: image_id,"},{"line_number":59,"context_line":"                \u0027sr_path\u0027: vm_utils.get_sr_path(session),"},{"line_number":60,"context_line":"                \u0027extra_headers\u0027: glance.generate_identity_headers(context)}"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def download_image(self, context, session, instance, image_id):"},{"line_number":63,"context_line":"        params \u003d self._make_params(context, session, image_id)"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a461143_163af936","side":"PARENT","line":60,"updated":"2017-01-25 16:06:18.000000000","message":"So this is actually really important.\n\nHere we pass this into the XenAPI plugin, so the plugin can call glance. It needs to know about the token, and all other headers. Please see:\nhttps://github.com/openstack/nova/blob/fd91a25324b7b7fed1f3f10c5b56668b20a170f4/plugins/xenserver/xenapi/etc/xapi.d/plugins/glance.py#L255\n\nI think we should just not delete the generate_identity_headers method, its just now its only use is in here.\n\nWe can tell if this works by looking at the XenServer CI results. They are currently coming back as a failure.","commit_id":"596e8de5ebd261b2b6610830641d23728b006f53"}],"releasenotes/notes/deprecate-ssl-opts-1b79fc1c822d9292.yaml":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e6d3e69d552d9d30180c745ef3806c7a36c5c12","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``ssl`` options were only used in Glance client. Now Glance client"},{"line_number":5,"context_line":"    uses keystoneauth and these options are not needed anymore in Nova."},{"line_number":6,"context_line":"    ``ssl`` options can be configured in Keystone. The following options are"},{"line_number":7,"context_line":"    now deprecated."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5a3905b3_edb86113","line":4,"range":{"start_line":4,"start_character":39,"end_line":4,"end_character":55},"updated":"2017-01-24 09:35:47.000000000","message":"Well, used by nova code that interacts with glance client.","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"93896e8f04cfe189d3d0bd7e5df8128a7da82d7f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"deprecations:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The ``ssl`` options were only used in Glance client. Now Glance client"},{"line_number":5,"context_line":"    uses keystoneauth and these options are not needed anymore in Nova."},{"line_number":6,"context_line":"    ``ssl`` options can be configured in Keystone. The following options are"},{"line_number":7,"context_line":"    now deprecated."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5a3905b3_53e49cab","line":4,"range":{"start_line":4,"start_character":39,"end_line":4,"end_character":55},"in_reply_to":"5a3905b3_edb86113","updated":"2017-01-24 18:04:04.000000000","message":"Done","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"1e6d3e69d552d9d30180c745ef3806c7a36c5c12","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5a3905b3_8dc7dd94","line":13,"updated":"2017-01-24 09:35:47.000000000","message":"So what is happening here, is the options are moving from the ssl group to the glance group, and being renamed slightly.\n\nWe are still using these options, just now these are defined and read by keystoneauth.","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"},{"author":{"_account_id":19590,"name":"Sarafraj Singh","email":"Sarafraj.Singh@intel.com","username":"sarafrajsingh"},"change_message_id":"93896e8f04cfe189d3d0bd7e5df8128a7da82d7f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"5a3905b3_93ec4494","line":13,"in_reply_to":"5a3905b3_8dc7dd94","updated":"2017-01-24 18:04:04.000000000","message":"Done","commit_id":"13a90c6b9ab7a3b4a1e8fdb31dec5fa7109c25bc"}],"releasenotes/notes/validate-expired-user-tokens-57a265cb4ee4ba6f.yaml":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2e90f23a62832d3e0bb010f88dc47d4e96bb915f","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    version 4.12.0 is required to use this functionality."},{"line_number":13,"context_line":"    This only works in cases where Nova interacts with following services"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"    - Cinder API"},{"line_number":16,"context_line":"    - Neutron API"},{"line_number":17,"context_line":"    - Glance API"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"ba5201f7_7cc1cd2e","line":17,"range":{"start_line":15,"start_character":4,"end_line":17,"end_character":16},"updated":"2017-01-12 02:13:10.000000000","message":"This formatting won\u0027t come out correctly, you have to do something like this:\n\nfeatures:\n  - |\n    Added support for....","commit_id":"b117b7031a0cfb5fca8184a41c77e36c2ea5fceb"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"06a7e334f0b6961281c4de2d96366bdf364ad618","unresolved":false,"context_lines":[{"line_number":11,"context_line":"    ``True``. The minimum Keytone API version 3.8 and Keystone middleware"},{"line_number":12,"context_line":"    version 4.12.0 is required to use this functionality."},{"line_number":13,"context_line":"    This only currently works with Nova - Cinder and Nova - Neutron API"},{"line_number":14,"context_line":"    interactions."}],"source_content_type":"text/x-yaml","patch_set":8,"id":"7a3c09a3_19a130aa","line":14,"updated":"2017-01-13 15:30:50.000000000","message":"Nit: I guess this is a whitespace change or something? We should kill it.","commit_id":"b765fbfb5534e0db566555511f642e243ca7bcff"}]}
